@opensumi/ide-preferences 2.12.1-next-079c1930
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.
- package/README.md +190 -0
- package/lib/browser/abstract-resource-preference-provider.d.ts +51 -0
- package/lib/browser/abstract-resource-preference-provider.d.ts.map +1 -0
- package/lib/browser/abstract-resource-preference-provider.js +281 -0
- package/lib/browser/abstract-resource-preference-provider.js.map +1 -0
- package/lib/browser/folder-preference-provider.d.ts +26 -0
- package/lib/browser/folder-preference-provider.d.ts.map +1 -0
- package/lib/browser/folder-preference-provider.js +49 -0
- package/lib/browser/folder-preference-provider.js.map +1 -0
- package/lib/browser/folders-preferences-provider.d.ts +41 -0
- package/lib/browser/folders-preferences-provider.d.ts.map +1 -0
- package/lib/browser/folders-preferences-provider.js +240 -0
- package/lib/browser/folders-preferences-provider.js.map +1 -0
- package/lib/browser/index.d.ts +12 -0
- package/lib/browser/index.d.ts.map +1 -0
- package/lib/browser/index.js +120 -0
- package/lib/browser/index.js.map +1 -0
- package/lib/browser/index.less +35 -0
- package/lib/browser/preference-contribution.d.ts +51 -0
- package/lib/browser/preference-contribution.d.ts.map +1 -0
- package/lib/browser/preference-contribution.js +315 -0
- package/lib/browser/preference-contribution.js.map +1 -0
- package/lib/browser/preference-settings.service.d.ts +120 -0
- package/lib/browser/preference-settings.service.d.ts.map +1 -0
- package/lib/browser/preference-settings.service.js +492 -0
- package/lib/browser/preference-settings.service.js.map +1 -0
- package/lib/browser/preferenceItem.view.d.ts +20 -0
- package/lib/browser/preferenceItem.view.d.ts.map +1 -0
- package/lib/browser/preferenceItem.view.js +357 -0
- package/lib/browser/preferenceItem.view.js.map +1 -0
- package/lib/browser/preferences.module.less +272 -0
- package/lib/browser/preferences.view.d.ts +29 -0
- package/lib/browser/preferences.view.d.ts.map +1 -0
- package/lib/browser/preferences.view.js +159 -0
- package/lib/browser/preferences.view.js.map +1 -0
- package/lib/browser/user-preference-provider.d.ts +9 -0
- package/lib/browser/user-preference-provider.d.ts.map +1 -0
- package/lib/browser/user-preference-provider.js +23 -0
- package/lib/browser/user-preference-provider.js.map +1 -0
- package/lib/browser/userstorage/index.d.ts +3 -0
- package/lib/browser/userstorage/index.d.ts.map +1 -0
- package/lib/browser/userstorage/index.js +6 -0
- package/lib/browser/userstorage/index.js.map +1 -0
- package/lib/browser/userstorage/user-storage.contribution.d.ts +8 -0
- package/lib/browser/userstorage/user-storage.contribution.d.ts.map +1 -0
- package/lib/browser/userstorage/user-storage.contribution.js +27 -0
- package/lib/browser/userstorage/user-storage.contribution.js.map +1 -0
- package/lib/browser/userstorage/user-storage.service.d.ts +62 -0
- package/lib/browser/userstorage/user-storage.service.d.ts.map +1 -0
- package/lib/browser/userstorage/user-storage.service.js +163 -0
- package/lib/browser/userstorage/user-storage.service.js.map +1 -0
- package/lib/browser/workspace-file-preference-provider.d.ts +19 -0
- package/lib/browser/workspace-file-preference-provider.d.ts.map +1 -0
- package/lib/browser/workspace-file-preference-provider.js +49 -0
- package/lib/browser/workspace-file-preference-provider.js.map +1 -0
- package/lib/browser/workspace-preference-provider.d.ts +34 -0
- package/lib/browser/workspace-preference-provider.d.ts.map +1 -0
- package/lib/browser/workspace-preference-provider.js +109 -0
- package/lib/browser/workspace-preference-provider.js.map +1 -0
- package/lib/common/index.d.ts +5 -0
- package/lib/common/index.d.ts.map +1 -0
- package/lib/common/index.js +8 -0
- package/lib/common/index.js.map +1 -0
- package/lib/common/preference-id.d.ts +8 -0
- package/lib/common/preference-id.d.ts.map +1 -0
- package/lib/common/preference-id.js +12 -0
- package/lib/common/preference-id.js.map +1 -0
- package/lib/common/preference.d.ts +4 -0
- package/lib/common/preference.d.ts.map +1 -0
- package/lib/common/preference.js +21 -0
- package/lib/common/preference.js.map +1 -0
- package/lib/common/types.d.ts +38 -0
- package/lib/common/types.d.ts.map +1 -0
- package/lib/common/types.js +5 -0
- package/lib/common/types.js.map +1 -0
- package/lib/common/user-storage.d.ts +6 -0
- package/lib/common/user-storage.d.ts.map +1 -0
- package/lib/common/user-storage.js +6 -0
- package/lib/common/user-storage.js.map +1 -0
- package/lib/index.d.ts +2 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +5 -0
- package/lib/index.js.map +1 -0
- package/package.json +29 -0
package/README.md
ADDED
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: main-layout
|
|
3
|
+
title: 配置模块
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Preferences 模块主要用于管理整个IDE配置的读取逻辑,
|
|
7
|
+
|
|
8
|
+
配置文件的目录位置可通过配置 `AppConfig` 中的 `userPreferenceDirName` 及 `workspacePreferenceDirName` 分别配置 全局配置 和 工作区配置的 `settings.json` 读取路径。
|
|
9
|
+
|
|
10
|
+
> 下面我们统一将 `.sumi` 作为我们默认的配置文件读取路径
|
|
11
|
+
|
|
12
|
+
对于全局配置,我们一般是从 `~/.sumi/settings.json` 文件中读取;
|
|
13
|
+
|
|
14
|
+
针对工作区的配置文件,我们一般是从 `${worksace_path}/.sumi/settings.json` 文件中读取,但在存在多个工作区存在的`多工作区` 项目,我们则是从 `${workspace_name}.sumi-workspace` 文件中读取;
|
|
15
|
+
|
|
16
|
+
你可以简单的通过如下方式来进行配置文件的修改,同时监听其变化:
|
|
17
|
+
|
|
18
|
+
```ts
|
|
19
|
+
|
|
20
|
+
@Injectable()
|
|
21
|
+
export class Demo {
|
|
22
|
+
|
|
23
|
+
@Autowired(PreferenceService)
|
|
24
|
+
preferenceService: PreferenceService;
|
|
25
|
+
...
|
|
26
|
+
|
|
27
|
+
// 监听配置变化事件
|
|
28
|
+
this.preferenceService.onPreferencesChanged((changes) => {
|
|
29
|
+
console.log('Preferences Changes: ', changes);
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
// 设置全局配置
|
|
33
|
+
this.preferenceService.set('config.id', true, PreferenceScope.User);
|
|
34
|
+
// 设置工作区配置
|
|
35
|
+
this.preferenceService.set('config.id', true, PreferenceScope.Workspace);
|
|
36
|
+
|
|
37
|
+
...
|
|
38
|
+
}
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
# 贡献点
|
|
44
|
+
|
|
45
|
+
## Contribution Providers
|
|
46
|
+
|
|
47
|
+
模块定义的用于其他模块贡献的贡献点。
|
|
48
|
+
|
|
49
|
+
### PreferenceContribution
|
|
50
|
+
|
|
51
|
+
用于在框架中注册配置定义,你可以创建一个贡献点模块,在应用启动时引入该贡献点模块,来实现自定义的配置定义。
|
|
52
|
+
|
|
53
|
+
##### Example
|
|
54
|
+
```ts
|
|
55
|
+
|
|
56
|
+
// 定义一个 `general.language` 配置项
|
|
57
|
+
const preferencesSchema: PreferenceSchema = {
|
|
58
|
+
'type': 'object',
|
|
59
|
+
properties: {
|
|
60
|
+
'general.demo': {
|
|
61
|
+
type: 'string',
|
|
62
|
+
default: 'zh-CN',
|
|
63
|
+
description: 'Demo preference%',
|
|
64
|
+
},
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
@Domain(PreferenceContribution)
|
|
69
|
+
export class DemoPreferenceContribution implements PreferenceContribution {
|
|
70
|
+
schema: PreferenceSchema = preferencesSchema;
|
|
71
|
+
}
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### SettingContribution
|
|
75
|
+
|
|
76
|
+
如果你需要让你定义的配置出现在设置面板中,你还可以通过 `SettingContribution` 贡献点来定义。
|
|
77
|
+
|
|
78
|
+
##### Example
|
|
79
|
+
```ts
|
|
80
|
+
// 在 `general` 面板追加一个 `general.demo` 配置项的展示
|
|
81
|
+
@Domain(SettingContribution)
|
|
82
|
+
export class DemoSettingContribution implements SettingContribution {
|
|
83
|
+
handleSettingSections(settingSections: { [key: string]: ISettingSection[]; }) {
|
|
84
|
+
return {
|
|
85
|
+
...settingSections,
|
|
86
|
+
general: [
|
|
87
|
+
{
|
|
88
|
+
preferences: [
|
|
89
|
+
// 原有配置项
|
|
90
|
+
{ id: 'general.theme', localized: 'preference.general.theme' },
|
|
91
|
+
{ id: 'general.icon', localized: 'preference.general.icon' },
|
|
92
|
+
{ id: 'general.language', localized: 'preference.general.language' },
|
|
93
|
+
// 追加配置项
|
|
94
|
+
{ id: 'general.demo', localized: 'preference.demo' },
|
|
95
|
+
],
|
|
96
|
+
},
|
|
97
|
+
],
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
模块注册的贡献点。
|
|
104
|
+
|
|
105
|
+
### Command
|
|
106
|
+
|
|
107
|
+
* `preference.open.user`: 打开用户配置文件
|
|
108
|
+
* `preference.open.workspace`: 打开工作区配置文件
|
|
109
|
+
* `core.openpreference`: 打开设置面板
|
|
110
|
+
|
|
111
|
+
### KeyBinding
|
|
112
|
+
|
|
113
|
+
* `ctrlcmd+,`: 打开设置面板
|
|
114
|
+
|
|
115
|
+
# 类
|
|
116
|
+
|
|
117
|
+
## PreferenceService
|
|
118
|
+
|
|
119
|
+
`DI token: PreferenceService`
|
|
120
|
+
|
|
121
|
+
一个简易的配置获取服务,能通过该符合获取到某个配置当前的值。
|
|
122
|
+
|
|
123
|
+
### Property
|
|
124
|
+
|
|
125
|
+
#### `ready`
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
```ts
|
|
129
|
+
ready: Promise<void>;
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
通过在模块中 `await this.preferenceService.ready` 能保障配置模块在被使用时已初始化完毕。
|
|
133
|
+
|
|
134
|
+
### Methods
|
|
135
|
+
|
|
136
|
+
#### `set()`
|
|
137
|
+
|
|
138
|
+
```ts
|
|
139
|
+
/**
|
|
140
|
+
* 设置一个偏好值
|
|
141
|
+
* @param preferenceName 偏好名称
|
|
142
|
+
* @param value 设置值
|
|
143
|
+
* @param scope 目标scope级别 如 User, Workspace
|
|
144
|
+
* @param resourceUri 资源路径
|
|
145
|
+
* @param overrideIdentifier 一般指语言偏好设置
|
|
146
|
+
*/
|
|
147
|
+
set(preferenceName: string, value: any, scope?: PreferenceScope, resourceUri?: string, overrideIdentifier?: string): Promise<void>;
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
用于设置某个配置在不同作用域,不同资源路径下的值
|
|
151
|
+
|
|
152
|
+
#### `get()`
|
|
153
|
+
|
|
154
|
+
```ts
|
|
155
|
+
/**
|
|
156
|
+
*
|
|
157
|
+
* @param preferenceName 配置名称
|
|
158
|
+
* @param defaultValue 默认值
|
|
159
|
+
* @param resourceUri 资源路径
|
|
160
|
+
* @param overrideIdentifier 一般指语言偏好设置
|
|
161
|
+
*/
|
|
162
|
+
get<T>(preferenceName: string, defaultValue?: T, resourceUri?: string, overrideIdentifier?: string): T | undefined;
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
支持获取某个配置在不同作用域,不同资源路径下的值
|
|
166
|
+
|
|
167
|
+
#### `onPreferencesChanged`
|
|
168
|
+
|
|
169
|
+
```ts
|
|
170
|
+
onPreferencesChanged: Event<PreferenceChanges>;
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
配置变更事件,这里会获取到一个配置变更的集合。
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
#### `onPreferenceChanged()`
|
|
177
|
+
|
|
178
|
+
```ts
|
|
179
|
+
onPreferenceChanged: Event<PreferenceChange>;
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
配置变更事件,这里会获取到一个配置的变更事件。
|
|
183
|
+
|
|
184
|
+
#### `onLanguagePreferencesChanged`
|
|
185
|
+
|
|
186
|
+
```ts
|
|
187
|
+
onLanguagePreferencesChanged: Event<{overrideIdentifier: string, changes: PreferenceChanges}>;
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
语言偏好设置的变更事件。
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { URI, IResolvedPreferences } from '@opensumi/ide-core-browser';
|
|
2
|
+
import { PreferenceProvider, PreferenceSchemaProvider, PreferenceScope, PreferenceConfigurations } from '@opensumi/ide-core-browser';
|
|
3
|
+
import { IPreferenceTask } from '../common';
|
|
4
|
+
import { IFileServiceClient } from '@opensumi/ide-file-service';
|
|
5
|
+
export declare const OVERRIDE_PROPERTY_PATTERN: RegExp;
|
|
6
|
+
export declare abstract class AbstractResourcePreferenceProvider extends PreferenceProvider {
|
|
7
|
+
protected preferences: IResolvedPreferences;
|
|
8
|
+
protected readonly schemaProvider: PreferenceSchemaProvider;
|
|
9
|
+
protected readonly configurations: PreferenceConfigurations;
|
|
10
|
+
protected readonly fileSystem: IFileServiceClient;
|
|
11
|
+
private logger;
|
|
12
|
+
private preferenceThrottler;
|
|
13
|
+
private preferenceTasks;
|
|
14
|
+
constructor();
|
|
15
|
+
protected listen(): void;
|
|
16
|
+
protected init(): Promise<void>;
|
|
17
|
+
protected abstract getUri(): URI;
|
|
18
|
+
protected abstract getScope(): PreferenceScope;
|
|
19
|
+
getConfigUri(): URI;
|
|
20
|
+
getConfigUri(resourceUri: string | undefined): URI | undefined;
|
|
21
|
+
contains(resourceUri: string | undefined): boolean;
|
|
22
|
+
getPreferences(resourceUri?: string, language?: string): {
|
|
23
|
+
[key: string]: any;
|
|
24
|
+
} | undefined;
|
|
25
|
+
getLanguagePreferences(resourceUri?: string): {
|
|
26
|
+
[languageId: string]: {
|
|
27
|
+
[key: string]: any;
|
|
28
|
+
};
|
|
29
|
+
} | undefined;
|
|
30
|
+
getOnePreference(language?: string): {
|
|
31
|
+
[key: string]: any;
|
|
32
|
+
};
|
|
33
|
+
resolvePreferenceTasks(tasks: IPreferenceTask[]): Promise<boolean>;
|
|
34
|
+
/**
|
|
35
|
+
* 配置变更队列处理函数
|
|
36
|
+
*/
|
|
37
|
+
doSetPreferenceTask(): Promise<boolean>;
|
|
38
|
+
doSetPreference(key: string, value: any, resourceUri?: string, language?: string): Promise<boolean>;
|
|
39
|
+
protected getPath(preferenceName: string, language?: string): string[] | undefined;
|
|
40
|
+
protected loaded: boolean;
|
|
41
|
+
protected readPreferences(content?: string): Promise<void>;
|
|
42
|
+
protected readContents(): Promise<string | undefined>;
|
|
43
|
+
protected getParsedContent(content: string): IResolvedPreferences;
|
|
44
|
+
protected validate(preferenceName: string, preferenceValue: any): boolean;
|
|
45
|
+
protected parse(content: string): any;
|
|
46
|
+
protected handlePreferenceChanges(newPrefs: IResolvedPreferences): void;
|
|
47
|
+
protected reset(): void;
|
|
48
|
+
private collectChanges;
|
|
49
|
+
private collectOneChanges;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=abstract-resource-preference-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abstract-resource-preference-provider.d.ts","sourceRoot":"","sources":["../../src/browser/abstract-resource-preference-provider.ts"],"names":[],"mappings":"AAEA,OAAO,EAAa,GAAG,EAAmE,oBAAoB,EAAyB,MAAM,4BAA4B,CAAC;AAC1K,OAAO,EACL,kBAAkB,EAClB,wBAAwB,EACxB,eAAe,EAEf,wBAAwB,EACzB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,eAAe,EAAuB,MAAM,WAAW,CAAC;AACjE,OAAO,EAAe,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAM7E,eAAO,MAAM,yBAAyB,QAAgC,CAAC;AAEvE,8BACsB,kCAAmC,SAAQ,kBAAkB;IAEjF,SAAS,CAAC,WAAW,EAAE,oBAAoB,CAGzC;IAGF,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE,wBAAwB,CAAC;IAG5D,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE,wBAAwB,CAAC;IAG5D,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,kBAAkB,CAAC;IAGlD,OAAO,CAAC,MAAM,CAAU;IAExB,OAAO,CAAC,mBAAmB,CAA8B;IACzD,OAAO,CAAC,eAAe,CAAyB;;IAOhD,SAAS,CAAC,MAAM;cAaA,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAmBrC,SAAS,CAAC,QAAQ,CAAC,MAAM,IAAI,GAAG;IAChC,SAAS,CAAC,QAAQ,CAAC,QAAQ,IAAI,eAAe;IAE9C,YAAY,IAAI,GAAG;IACnB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,GAAG,GAAG,SAAS;IAS9D,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO;IAYlD,cAAc,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM;;;IAItD,sBAAsB,CAAC,WAAW,CAAC,EAAE,MAAM;;;;;IAI3C,gBAAgB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE;IAQrD,sBAAsB,CAAC,KAAK,EAAE,eAAe,EAAE;IAgCrD;;OAEG;IACH,mBAAmB;IAMb,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAazG,SAAS,CAAC,OAAO,CAAC,cAAc,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS;IAOlF,SAAS,CAAC,MAAM,UAAS;cACT,eAAe,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;cAOhD,YAAY,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAU3D,SAAS,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,oBAAoB;IA4BjE,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,GAAG,OAAO;IAOzE,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,GAAG;IASrC,SAAS,CAAC,uBAAuB,CAAC,QAAQ,EAAE,oBAAoB,GAAG,IAAI;IAUvE,SAAS,CAAC,KAAK,IAAI,IAAI;IAUvB,OAAO,CAAC,cAAc;IAetB,OAAO,CAAC,iBAAiB;CA4B1B"}
|
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AbstractResourcePreferenceProvider = exports.OVERRIDE_PROPERTY_PATTERN = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const jsoncparser = (0, tslib_1.__importStar)(require("jsonc-parser"));
|
|
6
|
+
const di_1 = require("@opensumi/di");
|
|
7
|
+
const ide_core_browser_1 = require("@opensumi/ide-core-browser");
|
|
8
|
+
const ide_core_browser_2 = require("@opensumi/ide-core-browser");
|
|
9
|
+
const common_1 = require("../common");
|
|
10
|
+
const ide_file_service_1 = require("@opensumi/ide-file-service");
|
|
11
|
+
// vscode 对语言的setting是根据这种格式来的
|
|
12
|
+
// "[json]": { "editor.formatter": "xxxx" }
|
|
13
|
+
// 对其进行兼容
|
|
14
|
+
const OVERRIDE_PROPERTY = '\\[(.*)\\]$';
|
|
15
|
+
exports.OVERRIDE_PROPERTY_PATTERN = new RegExp(OVERRIDE_PROPERTY);
|
|
16
|
+
let AbstractResourcePreferenceProvider = class AbstractResourcePreferenceProvider extends ide_core_browser_2.PreferenceProvider {
|
|
17
|
+
constructor() {
|
|
18
|
+
super();
|
|
19
|
+
this.preferences = {
|
|
20
|
+
default: {},
|
|
21
|
+
languageSpecific: {},
|
|
22
|
+
};
|
|
23
|
+
this.preferenceThrottler = new ide_core_browser_1.Throttler();
|
|
24
|
+
this.preferenceTasks = [];
|
|
25
|
+
this.loaded = false;
|
|
26
|
+
this.listen();
|
|
27
|
+
}
|
|
28
|
+
listen() {
|
|
29
|
+
if (this.fileSystem.handlesScheme(ide_file_service_1.FILE_SCHEME) && this.fileSystem.handlesScheme(common_1.USER_STORAGE_SCHEME)) {
|
|
30
|
+
this.init();
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
const disposable = this.fileSystem.onFileProviderChanged((scheme) => {
|
|
34
|
+
if (this.fileSystem.handlesScheme(ide_file_service_1.FILE_SCHEME) && this.fileSystem.handlesScheme(common_1.USER_STORAGE_SCHEME)) {
|
|
35
|
+
this.init();
|
|
36
|
+
disposable.dispose();
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
async init() {
|
|
42
|
+
// 尝试读取preferences初始内容
|
|
43
|
+
this.readPreferences()
|
|
44
|
+
.then(() => this._ready.resolve())
|
|
45
|
+
.catch(() => this._ready.resolve());
|
|
46
|
+
const uri = this.getUri();
|
|
47
|
+
const watcher = await this.fileSystem.watchFileChanges(uri);
|
|
48
|
+
// 配置文件改变时,重新读取配置
|
|
49
|
+
this.toDispose.push(watcher);
|
|
50
|
+
watcher.onFilesChanged((e) => {
|
|
51
|
+
const effected = e.find((file) => file.uri === uri.toString());
|
|
52
|
+
if (effected) {
|
|
53
|
+
return this.readPreferences();
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
this.toDispose.push(ide_core_browser_1.Disposable.create(() => this.reset()));
|
|
57
|
+
}
|
|
58
|
+
getConfigUri(resourceUri) {
|
|
59
|
+
if (!resourceUri) {
|
|
60
|
+
return this.getUri();
|
|
61
|
+
}
|
|
62
|
+
// 获取configUri不需要等待配置读取完应该就可以读取
|
|
63
|
+
return this.contains(resourceUri) ? this.getUri() : undefined;
|
|
64
|
+
}
|
|
65
|
+
contains(resourceUri) {
|
|
66
|
+
if (!resourceUri) {
|
|
67
|
+
return true;
|
|
68
|
+
}
|
|
69
|
+
const domain = this.getDomain();
|
|
70
|
+
if (!domain) {
|
|
71
|
+
return true;
|
|
72
|
+
}
|
|
73
|
+
const resourcePath = new ide_core_browser_1.URI(resourceUri).path;
|
|
74
|
+
return domain.some((uri) => new ide_core_browser_1.URI(uri).path.relativity(resourcePath) >= 0);
|
|
75
|
+
}
|
|
76
|
+
getPreferences(resourceUri, language) {
|
|
77
|
+
return this.loaded && this.contains(resourceUri) ? this.getOnePreference(language) : undefined;
|
|
78
|
+
}
|
|
79
|
+
getLanguagePreferences(resourceUri) {
|
|
80
|
+
return this.loaded && this.contains(resourceUri) ? this.preferences.languageSpecific : undefined;
|
|
81
|
+
}
|
|
82
|
+
getOnePreference(language) {
|
|
83
|
+
if (language) {
|
|
84
|
+
return this.preferences.languageSpecific[language] || {};
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
return this.preferences.default;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
async resolvePreferenceTasks(tasks) {
|
|
91
|
+
const uri = this.getUri();
|
|
92
|
+
// 读取配置时同时更新一下资源信息,防止写入时对异步写入情况的错误判断
|
|
93
|
+
this.resource = this.fileSystem.getFileStat(uri.toString());
|
|
94
|
+
let resource = await this.resource;
|
|
95
|
+
let content = ((await this.readContents()) || '').trim();
|
|
96
|
+
// 将多次配置修改合并为一次文件内容变更
|
|
97
|
+
for (const task of tasks) {
|
|
98
|
+
const { path, value } = task;
|
|
99
|
+
if ((!content || path.length === 0) && (0, ide_core_browser_1.isUndefined)(value)) {
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
const formattingOptions = { tabSize: 2, insertSpaces: true, eol: '' };
|
|
103
|
+
const edits = jsoncparser.modify(content, path, value, { formattingOptions });
|
|
104
|
+
content = jsoncparser.applyEdits(content, edits);
|
|
105
|
+
}
|
|
106
|
+
try {
|
|
107
|
+
if (!resource) {
|
|
108
|
+
// 当资源不存在又需要写入数据时,创建对应文件
|
|
109
|
+
resource = await this.fileSystem.createFile(uri.toString());
|
|
110
|
+
}
|
|
111
|
+
await this.fileSystem.setContent(resource, content);
|
|
112
|
+
await this.readPreferences(content);
|
|
113
|
+
return true;
|
|
114
|
+
}
|
|
115
|
+
catch (e) {
|
|
116
|
+
this.logger.error(`${e.toString()}`);
|
|
117
|
+
return false;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* 配置变更队列处理函数
|
|
122
|
+
*/
|
|
123
|
+
doSetPreferenceTask() {
|
|
124
|
+
const tasks = this.preferenceTasks.slice(0);
|
|
125
|
+
this.preferenceTasks = [];
|
|
126
|
+
return this.resolvePreferenceTasks(tasks);
|
|
127
|
+
}
|
|
128
|
+
async doSetPreference(key, value, resourceUri, language) {
|
|
129
|
+
if (!this.contains(resourceUri)) {
|
|
130
|
+
return false;
|
|
131
|
+
}
|
|
132
|
+
const path = this.getPath(key, language);
|
|
133
|
+
if (!path) {
|
|
134
|
+
return false;
|
|
135
|
+
}
|
|
136
|
+
// 这里将每次配置变更的参数构造为一个 IPreferenceTask
|
|
137
|
+
this.preferenceTasks.push({ path, key, value });
|
|
138
|
+
return await this.preferenceThrottler.queue(this.doSetPreferenceTask.bind(this));
|
|
139
|
+
}
|
|
140
|
+
getPath(preferenceName, language) {
|
|
141
|
+
if (language) {
|
|
142
|
+
return [`[${language}]`, preferenceName];
|
|
143
|
+
}
|
|
144
|
+
return [preferenceName];
|
|
145
|
+
}
|
|
146
|
+
async readPreferences(content) {
|
|
147
|
+
const newContent = content || await this.readContents();
|
|
148
|
+
this.loaded = !(0, ide_core_browser_1.isUndefined)(newContent);
|
|
149
|
+
const newPrefs = newContent ? this.getParsedContent(newContent) : { default: {}, languageSpecific: {} };
|
|
150
|
+
this.handlePreferenceChanges(newPrefs);
|
|
151
|
+
}
|
|
152
|
+
async readContents() {
|
|
153
|
+
try {
|
|
154
|
+
const uri = this.getUri();
|
|
155
|
+
const { content } = await this.fileSystem.readFile(uri.toString());
|
|
156
|
+
return content.toString();
|
|
157
|
+
}
|
|
158
|
+
catch (_a) {
|
|
159
|
+
return undefined;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
getParsedContent(content) {
|
|
163
|
+
const jsonData = this.parse(content);
|
|
164
|
+
const preferences = {
|
|
165
|
+
default: {},
|
|
166
|
+
languageSpecific: {},
|
|
167
|
+
};
|
|
168
|
+
if (typeof jsonData !== 'object') {
|
|
169
|
+
return preferences;
|
|
170
|
+
}
|
|
171
|
+
for (const preferenceName of Object.keys(jsonData)) {
|
|
172
|
+
const preferenceValue = jsonData[preferenceName];
|
|
173
|
+
// 这里由于插件的schema注册较晚,在第一次获取配置时会校验不通过导致取不到值,读取暂时去掉校验逻辑
|
|
174
|
+
if (exports.OVERRIDE_PROPERTY_PATTERN.test(preferenceName)) {
|
|
175
|
+
const language = preferenceName.match(exports.OVERRIDE_PROPERTY_PATTERN)[1];
|
|
176
|
+
preferences.languageSpecific[language] = preferences.languageSpecific[language] || {};
|
|
177
|
+
// tslint:disable-next-line:forin
|
|
178
|
+
for (const overriddenPreferenceName in preferenceValue) {
|
|
179
|
+
const overriddenValue = preferenceValue[overriddenPreferenceName];
|
|
180
|
+
preferences.languageSpecific[language][`${overriddenPreferenceName}`] = overriddenValue;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
preferences.default[preferenceName] = preferenceValue;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
return preferences;
|
|
188
|
+
}
|
|
189
|
+
validate(preferenceName, preferenceValue) {
|
|
190
|
+
if (this.configurations.getPath(this.getUri()) !== this.configurations.getPaths()[0]) {
|
|
191
|
+
return true;
|
|
192
|
+
}
|
|
193
|
+
return (0, ide_core_browser_1.isUndefined)(preferenceValue) || this.schemaProvider.validate(preferenceName, preferenceValue).valid;
|
|
194
|
+
}
|
|
195
|
+
parse(content) {
|
|
196
|
+
content = content.trim();
|
|
197
|
+
if (!content) {
|
|
198
|
+
return undefined;
|
|
199
|
+
}
|
|
200
|
+
const strippedContent = jsoncparser.stripComments(content);
|
|
201
|
+
return jsoncparser.parse(strippedContent);
|
|
202
|
+
}
|
|
203
|
+
handlePreferenceChanges(newPrefs) {
|
|
204
|
+
const oldPrefs = Object.assign({}, this.preferences);
|
|
205
|
+
this.preferences = newPrefs;
|
|
206
|
+
const changes = this.collectChanges(this.preferences, oldPrefs);
|
|
207
|
+
if (Object.keys(changes.default).length > 0 || Object.keys(changes.languageSpecific).length > 0) {
|
|
208
|
+
this.emitPreferencesChangedEvent(changes);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
reset() {
|
|
212
|
+
const preferences = this.preferences;
|
|
213
|
+
this.preferences = { default: {}, languageSpecific: {} };
|
|
214
|
+
const changes = this.collectChanges(this.preferences, preferences);
|
|
215
|
+
if (Object.keys(changes.default).length > 0 || Object.keys(changes.languageSpecific).length > 0) {
|
|
216
|
+
this.emitPreferencesChangedEvent(changes);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
collectChanges(newPref, oldPref) {
|
|
220
|
+
const changes = {
|
|
221
|
+
default: this.collectOneChanges(newPref.default, oldPref.default),
|
|
222
|
+
languageSpecific: {},
|
|
223
|
+
};
|
|
224
|
+
const languages = new Set([...Object.keys(newPref.languageSpecific), ...Object.keys(oldPref.languageSpecific)]);
|
|
225
|
+
for (const language of languages) {
|
|
226
|
+
const languageChange = this.collectOneChanges(newPref.languageSpecific[language], oldPref.languageSpecific[language]);
|
|
227
|
+
if (Object.keys(languageChange).length > 0) {
|
|
228
|
+
changes.languageSpecific[language] = languageChange;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
return changes;
|
|
232
|
+
}
|
|
233
|
+
collectOneChanges(newPref, oldPref) {
|
|
234
|
+
const keys = new Set([...Object.keys(oldPref || {}), ...Object.keys(newPref || {})]);
|
|
235
|
+
const changes = {};
|
|
236
|
+
const uri = this.getUri();
|
|
237
|
+
for (const prefName of keys) {
|
|
238
|
+
const oldValue = oldPref[prefName];
|
|
239
|
+
const newValue = newPref[prefName];
|
|
240
|
+
const schemaProperties = this.schemaProvider.getCombinedSchema().properties[prefName];
|
|
241
|
+
if (schemaProperties) {
|
|
242
|
+
const scope = schemaProperties.scope;
|
|
243
|
+
// do not emit the change event if the change is made out of the defined preference scope
|
|
244
|
+
if (!this.schemaProvider.isValidInScope(prefName, this.getScope())) {
|
|
245
|
+
this.logger.warn(`Preference ${prefName} in ${uri} can only be defined in scopes: ${ide_core_browser_2.PreferenceScope.getScopeNames(scope).join(', ')}.`);
|
|
246
|
+
continue;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
if (((0, ide_core_browser_1.isUndefined)(newValue) && oldValue !== newValue)
|
|
250
|
+
|| ((0, ide_core_browser_1.isUndefined)(oldValue) && newValue !== oldValue) // JSONUtils.deepEqual() does not support handling `undefined`
|
|
251
|
+
|| !ide_core_browser_1.JSONUtils.deepEqual(oldValue, newValue)) {
|
|
252
|
+
changes[prefName] = {
|
|
253
|
+
preferenceName: prefName, newValue, oldValue, scope: this.getScope(), domain: this.getDomain(),
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
return changes;
|
|
258
|
+
}
|
|
259
|
+
};
|
|
260
|
+
(0, tslib_1.__decorate)([
|
|
261
|
+
(0, di_1.Autowired)(ide_core_browser_2.PreferenceSchemaProvider),
|
|
262
|
+
(0, tslib_1.__metadata)("design:type", ide_core_browser_2.PreferenceSchemaProvider)
|
|
263
|
+
], AbstractResourcePreferenceProvider.prototype, "schemaProvider", void 0);
|
|
264
|
+
(0, tslib_1.__decorate)([
|
|
265
|
+
(0, di_1.Autowired)(ide_core_browser_2.PreferenceConfigurations),
|
|
266
|
+
(0, tslib_1.__metadata)("design:type", ide_core_browser_2.PreferenceConfigurations)
|
|
267
|
+
], AbstractResourcePreferenceProvider.prototype, "configurations", void 0);
|
|
268
|
+
(0, tslib_1.__decorate)([
|
|
269
|
+
(0, di_1.Autowired)(ide_file_service_1.IFileServiceClient),
|
|
270
|
+
(0, tslib_1.__metadata)("design:type", Object)
|
|
271
|
+
], AbstractResourcePreferenceProvider.prototype, "fileSystem", void 0);
|
|
272
|
+
(0, tslib_1.__decorate)([
|
|
273
|
+
(0, di_1.Autowired)(ide_core_browser_1.ILogger),
|
|
274
|
+
(0, tslib_1.__metadata)("design:type", Object)
|
|
275
|
+
], AbstractResourcePreferenceProvider.prototype, "logger", void 0);
|
|
276
|
+
AbstractResourcePreferenceProvider = (0, tslib_1.__decorate)([
|
|
277
|
+
(0, di_1.Injectable)(),
|
|
278
|
+
(0, tslib_1.__metadata)("design:paramtypes", [])
|
|
279
|
+
], AbstractResourcePreferenceProvider);
|
|
280
|
+
exports.AbstractResourcePreferenceProvider = AbstractResourcePreferenceProvider;
|
|
281
|
+
//# sourceMappingURL=abstract-resource-preference-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"abstract-resource-preference-provider.js","sourceRoot":"","sources":["../../src/browser/abstract-resource-preference-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { URI, PreferenceScope } from '@opensumi/ide-core-browser';
|
|
2
|
+
import { AbstractResourcePreferenceProvider } from './abstract-resource-preference-provider';
|
|
3
|
+
import { FileStat } from '@opensumi/ide-file-service';
|
|
4
|
+
import { IWorkspaceService } from '@opensumi/ide-workspace/lib/common';
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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,kCAAkC,EAAE,MAAM,yCAAyC,CAAC;AAC7F,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAEvE,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;IAI9E,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;CAItB"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FolderPreferenceProvider = exports.FolderPreferenceProviderOptions = exports.FolderPreferenceProviderFactory = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const di_1 = require("@opensumi/di");
|
|
6
|
+
const ide_core_browser_1 = require("@opensumi/ide-core-browser");
|
|
7
|
+
const abstract_resource_preference_provider_1 = require("./abstract-resource-preference-provider");
|
|
8
|
+
const common_1 = require("@opensumi/ide-workspace/lib/common");
|
|
9
|
+
exports.FolderPreferenceProviderFactory = Symbol('FolderPreferenceProviderFactory');
|
|
10
|
+
exports.FolderPreferenceProviderOptions = Symbol('FolderPreferenceProviderOptions');
|
|
11
|
+
/**
|
|
12
|
+
* 这玩意应该叫 FolderFilePreferenceProvider, 它代表的是一个文件夹下的 “一个” 文件读出来的配置项
|
|
13
|
+
* 但是一个文件夹的配置文件夹比如 .sumi 内可以存在多个这样的文件, 比如 settings.json, launch.json
|
|
14
|
+
* 他们的结果会合并并且放入各自的section中。
|
|
15
|
+
*/
|
|
16
|
+
let FolderPreferenceProvider = class FolderPreferenceProvider extends abstract_resource_preference_provider_1.AbstractResourcePreferenceProvider {
|
|
17
|
+
get folderUri() {
|
|
18
|
+
if (!this._folderUri) {
|
|
19
|
+
this._folderUri = new ide_core_browser_1.URI(this.options.folder.uri);
|
|
20
|
+
}
|
|
21
|
+
return this._folderUri;
|
|
22
|
+
}
|
|
23
|
+
getUri() {
|
|
24
|
+
return this.options.configUri;
|
|
25
|
+
}
|
|
26
|
+
getScope() {
|
|
27
|
+
// 当在非工作区场景下时,采用PreferenceScope.Workspace作为配置作用域
|
|
28
|
+
if (!this.workspaceService.isMultiRootWorkspaceOpened) {
|
|
29
|
+
return ide_core_browser_1.PreferenceScope.Workspace;
|
|
30
|
+
}
|
|
31
|
+
return ide_core_browser_1.PreferenceScope.Folder;
|
|
32
|
+
}
|
|
33
|
+
getDomain() {
|
|
34
|
+
return [this.folderUri.toString()];
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
(0, tslib_1.__decorate)([
|
|
38
|
+
(0, di_1.Autowired)(exports.FolderPreferenceProviderOptions),
|
|
39
|
+
(0, tslib_1.__metadata)("design:type", Object)
|
|
40
|
+
], FolderPreferenceProvider.prototype, "options", void 0);
|
|
41
|
+
(0, tslib_1.__decorate)([
|
|
42
|
+
(0, di_1.Autowired)(common_1.IWorkspaceService),
|
|
43
|
+
(0, tslib_1.__metadata)("design:type", Object)
|
|
44
|
+
], FolderPreferenceProvider.prototype, "workspaceService", void 0);
|
|
45
|
+
FolderPreferenceProvider = (0, tslib_1.__decorate)([
|
|
46
|
+
(0, di_1.Injectable)()
|
|
47
|
+
], FolderPreferenceProvider);
|
|
48
|
+
exports.FolderPreferenceProvider = FolderPreferenceProvider;
|
|
49
|
+
//# sourceMappingURL=folder-preference-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"folder-preference-provider.js","sourceRoot":"","sources":["../../src/browser/folder-preference-provider.ts"],"names":[],"mappings":";;;;AAAA,qCAAqD;AACrD,iEAAkE;AAClE,mGAA6F;AAE7F,+DAAuE;AAE1D,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;IAW9E,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;CAEF,CAAA;AA9BC;IADC,IAAA,cAAS,EAAC,uCAA+B,CAAC;;yDACiB;AAG5D;IADC,IAAA,cAAS,EAAC,0BAAiB,CAAC;;kEAC0B;AAP5C,wBAAwB;IADpC,IAAA,eAAU,GAAE;GACA,wBAAwB,CAkCpC;AAlCY,4DAAwB"}
|