@opensumi/ide-addons 2.12.1-next-47fa8bf2
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 +1 -0
- package/lib/browser/file-content-update-time.contribution.d.ts +53 -0
- package/lib/browser/file-content-update-time.contribution.d.ts.map +1 -0
- package/lib/browser/file-content-update-time.contribution.js +219 -0
- package/lib/browser/file-content-update-time.contribution.js.map +1 -0
- package/lib/browser/file-drop.contribution.d.ts +7 -0
- package/lib/browser/file-drop.contribution.d.ts.map +1 -0
- package/lib/browser/file-drop.contribution.js +29 -0
- package/lib/browser/file-drop.contribution.js.map +1 -0
- package/lib/browser/file-drop.service.d.ts +22 -0
- package/lib/browser/file-drop.service.d.ts.map +1 -0
- package/lib/browser/file-drop.service.js +136 -0
- package/lib/browser/file-drop.service.js.map +1 -0
- package/lib/browser/file-search.contribution.d.ts +58 -0
- package/lib/browser/file-search.contribution.d.ts.map +1 -0
- package/lib/browser/file-search.contribution.js +536 -0
- package/lib/browser/file-search.contribution.js.map +1 -0
- package/lib/browser/index.d.ts +17 -0
- package/lib/browser/index.d.ts.map +1 -0
- package/lib/browser/index.js +39 -0
- package/lib/browser/index.js.map +1 -0
- package/lib/browser/langauge-change.contribution.d.ts +9 -0
- package/lib/browser/langauge-change.contribution.d.ts.map +1 -0
- package/lib/browser/langauge-change.contribution.js +42 -0
- package/lib/browser/langauge-change.contribution.js.map +1 -0
- package/lib/browser/status-bar-contribution.d.ts +9 -0
- package/lib/browser/status-bar-contribution.d.ts.map +1 -0
- package/lib/browser/status-bar-contribution.js +37 -0
- package/lib/browser/status-bar-contribution.js.map +1 -0
- package/lib/browser/toolbar-customize/style.module.less +54 -0
- package/lib/browser/toolbar-customize/toolbar-customize.contribution.d.ts +11 -0
- package/lib/browser/toolbar-customize/toolbar-customize.contribution.d.ts.map +1 -0
- package/lib/browser/toolbar-customize/toolbar-customize.contribution.js +53 -0
- package/lib/browser/toolbar-customize/toolbar-customize.contribution.js.map +1 -0
- package/lib/browser/toolbar-customize/toolbar-customize.d.ts +11 -0
- package/lib/browser/toolbar-customize/toolbar-customize.d.ts.map +1 -0
- package/lib/browser/toolbar-customize/toolbar-customize.js +107 -0
- package/lib/browser/toolbar-customize/toolbar-customize.js.map +1 -0
- package/lib/common/index.d.ts +30 -0
- package/lib/common/index.d.ts.map +1 -0
- package/lib/common/index.js +7 -0
- package/lib/common/index.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/lib/node/file-drop.service.d.ts +7 -0
- package/lib/node/file-drop.service.d.ts.map +1 -0
- package/lib/node/file-drop.service.js +39 -0
- package/lib/node/file-drop.service.js.map +1 -0
- package/lib/node/index.d.ts +10 -0
- package/lib/node/index.d.ts.map +1 -0
- package/lib/node/index.js +30 -0
- package/lib/node/index.js.map +1 -0
- package/package.json +40 -0
package/README.md
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# --name--
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { WithEventBus } from '@opensumi/ide-core-common';
|
|
2
|
+
import { EditorDocumentModelSavedEvent, EditorDocumentModelWillSaveEvent } from '@opensumi/ide-editor/lib/browser';
|
|
3
|
+
/**
|
|
4
|
+
* 本模块默认不加载,集成侧需要自定引入
|
|
5
|
+
* 监听文件及内容变更的耗时
|
|
6
|
+
* 命中条件:
|
|
7
|
+
* * file 类型文件
|
|
8
|
+
* * 在当前项目的 workspace root 下的文件
|
|
9
|
+
* * 打开了 trace log 配置 (具体字段见 `TRACE_LOG_FLAG`)
|
|
10
|
+
* 记录的文件操作类型:
|
|
11
|
+
* * 文件的创建/删除/复制/移动
|
|
12
|
+
* * 文件内容变更 (增加 debounce 500ms 避免自动保存/批量替换/LSP重命名 触发的大量变更导致上报数量过多)
|
|
13
|
+
* 记录的字段:
|
|
14
|
+
* * name: `FileAndContentOperation`
|
|
15
|
+
* * msg: 文件操作的类型
|
|
16
|
+
* * extra.uri: 文件 uri string
|
|
17
|
+
* * extra.time: 耗时
|
|
18
|
+
* * extra.result: 0 为成功 1 为失败
|
|
19
|
+
* 其他备注:
|
|
20
|
+
* * time 的实际意义:
|
|
21
|
+
* - 记录了文件操作的从 js 代码开始执行到创建成功后前端可以收到通知的过程时长
|
|
22
|
+
* - 但是不涵盖异步事件通知文件树进行节点变幻到前端渲染完成的耗时部分
|
|
23
|
+
* - 当然对于文件内容更新的操作,这个时间就是完整的时间
|
|
24
|
+
*/
|
|
25
|
+
export declare class FileAndContentUpdateTimeContribution extends WithEventBus {
|
|
26
|
+
private readonly workspaceFileService;
|
|
27
|
+
private readonly preferenceService;
|
|
28
|
+
private readonly workspaceService;
|
|
29
|
+
private readonly reporterService;
|
|
30
|
+
private readonly preferenceSchemaProvider;
|
|
31
|
+
private _traceConfig;
|
|
32
|
+
private _markedFileUris;
|
|
33
|
+
constructor();
|
|
34
|
+
onDidStart(): void;
|
|
35
|
+
handleEditorDocModelWillSave(e: EditorDocumentModelWillSaveEvent): void;
|
|
36
|
+
handleEditorDocModelDidSave(e: EditorDocumentModelSavedEvent): void;
|
|
37
|
+
private _participateFileOperation;
|
|
38
|
+
private fileOperationParticipant;
|
|
39
|
+
/**
|
|
40
|
+
* refactoring changes 带来的文件增删也会带进来,但是一般来说比较少见
|
|
41
|
+
* 出于性能考虑,删除文件的设计是异步操作的,因此删除文件可能耗时比肉眼可见的要长一些
|
|
42
|
+
*/
|
|
43
|
+
private _handleFileOperationDidRun;
|
|
44
|
+
private _handleFileOperationDidFail;
|
|
45
|
+
private _markFileUri;
|
|
46
|
+
private _reportFileOperation;
|
|
47
|
+
private _initTraceConfig;
|
|
48
|
+
/**
|
|
49
|
+
* 不符合要求的文件直接跳过
|
|
50
|
+
*/
|
|
51
|
+
private _shouldReport;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=file-content-update-time.contribution.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-content-update-time.contribution.d.ts","sourceRoot":"","sources":["../../src/browser/file-content-update-time.contribution.ts"],"names":[],"mappings":"AAEA,OAAO,EAAyD,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAGhH,OAAO,EAAE,6BAA6B,EAAE,gCAAgC,EAAE,MAAM,kCAAkC,CAAC;AAiDnH;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAEa,oCAAqC,SAAQ,YAAY;IAEpE,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAwB;IAG7D,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAoB;IAGtD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAoB;IAGrD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAmB;IAGnD,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAA2B;IAEpE,OAAO,CAAC,YAAY,CAAkB;IAEtC,OAAO,CAAC,eAAe,CAAoF;;IAM3G,UAAU;IAaH,4BAA4B,CAAC,CAAC,EAAE,gCAAgC;IAShE,2BAA2B,CAAC,CAAC,EAAE,6BAA6B;IAKnE,OAAO,CAAC,yBAAyB;YAmBnB,wBAAwB;IAOtC;;;OAGG;IACH,OAAO,CAAC,0BAA0B;IAOlC,OAAO,CAAC,2BAA2B;YAOrB,YAAY;YAaZ,oBAAoB;IA0BlC,OAAO,CAAC,gBAAgB;IAYxB;;OAEG;YACW,aAAa;CAe5B"}
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FileAndContentUpdateTimeContribution = 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 ide_core_common_1 = require("@opensumi/ide-core-common");
|
|
8
|
+
const ide_workspace_edit_1 = require("@opensumi/ide-workspace-edit");
|
|
9
|
+
const ide_core_browser_2 = require("@opensumi/ide-core-browser");
|
|
10
|
+
const browser_1 = require("@opensumi/ide-editor/lib/browser");
|
|
11
|
+
const ide_workspace_1 = require("@opensumi/ide-workspace");
|
|
12
|
+
var ContentUpdateOperation;
|
|
13
|
+
(function (ContentUpdateOperation) {
|
|
14
|
+
/**
|
|
15
|
+
* 文本内容更新
|
|
16
|
+
*/
|
|
17
|
+
ContentUpdateOperation[ContentUpdateOperation["Update"] = -100] = "Update";
|
|
18
|
+
})(ContentUpdateOperation || (ContentUpdateOperation = {}));
|
|
19
|
+
var FileOperationResultEnum;
|
|
20
|
+
(function (FileOperationResultEnum) {
|
|
21
|
+
FileOperationResultEnum["SUCCESS"] = "success";
|
|
22
|
+
FileOperationResultEnum["FAIL"] = "fail";
|
|
23
|
+
})(FileOperationResultEnum || (FileOperationResultEnum = {}));
|
|
24
|
+
const FileOperationMsgMapStr = {
|
|
25
|
+
[ContentUpdateOperation.Update]: 'update',
|
|
26
|
+
[3 /* COPY */]: 'copy',
|
|
27
|
+
[0 /* CREATE */]: 'create',
|
|
28
|
+
[1 /* DELETE */]: 'delete',
|
|
29
|
+
[2 /* MOVE */]: 'move',
|
|
30
|
+
};
|
|
31
|
+
const TRACE_LOG_FLAG = 'trace.file-content.update.time';
|
|
32
|
+
const configurationSchema = {
|
|
33
|
+
title: 'Addons',
|
|
34
|
+
properties: {
|
|
35
|
+
[TRACE_LOG_FLAG]: {
|
|
36
|
+
type: 'boolean',
|
|
37
|
+
default: false,
|
|
38
|
+
description: 'flag for tracing file/content update time consuming',
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* 本模块默认不加载,集成侧需要自定引入
|
|
44
|
+
* 监听文件及内容变更的耗时
|
|
45
|
+
* 命中条件:
|
|
46
|
+
* * file 类型文件
|
|
47
|
+
* * 在当前项目的 workspace root 下的文件
|
|
48
|
+
* * 打开了 trace log 配置 (具体字段见 `TRACE_LOG_FLAG`)
|
|
49
|
+
* 记录的文件操作类型:
|
|
50
|
+
* * 文件的创建/删除/复制/移动
|
|
51
|
+
* * 文件内容变更 (增加 debounce 500ms 避免自动保存/批量替换/LSP重命名 触发的大量变更导致上报数量过多)
|
|
52
|
+
* 记录的字段:
|
|
53
|
+
* * name: `FileAndContentOperation`
|
|
54
|
+
* * msg: 文件操作的类型
|
|
55
|
+
* * extra.uri: 文件 uri string
|
|
56
|
+
* * extra.time: 耗时
|
|
57
|
+
* * extra.result: 0 为成功 1 为失败
|
|
58
|
+
* 其他备注:
|
|
59
|
+
* * time 的实际意义:
|
|
60
|
+
* - 记录了文件操作的从 js 代码开始执行到创建成功后前端可以收到通知的过程时长
|
|
61
|
+
* - 但是不涵盖异步事件通知文件树进行节点变幻到前端渲染完成的耗时部分
|
|
62
|
+
* - 当然对于文件内容更新的操作,这个时间就是完整的时间
|
|
63
|
+
*/
|
|
64
|
+
let FileAndContentUpdateTimeContribution = class FileAndContentUpdateTimeContribution extends ide_core_common_1.WithEventBus {
|
|
65
|
+
constructor() {
|
|
66
|
+
super();
|
|
67
|
+
this._traceConfig = false;
|
|
68
|
+
this._markedFileUris = new ide_core_common_1.StaleLRUMap(100, 50, 10 * 60 * 1000 /* 十分钟超时清理 */);
|
|
69
|
+
}
|
|
70
|
+
onDidStart() {
|
|
71
|
+
// Set configuration schema
|
|
72
|
+
this.preferenceSchemaProvider.setSchema(configurationSchema);
|
|
73
|
+
// Do somethings when file operation is happening
|
|
74
|
+
this._participateFileOperation();
|
|
75
|
+
// Init listener for showPreview
|
|
76
|
+
this._initTraceConfig();
|
|
77
|
+
}
|
|
78
|
+
// 增加一个 debounce 避免 editor.autoSave 导致频繁变更触发
|
|
79
|
+
// 只监听 file 协议
|
|
80
|
+
handleEditorDocModelWillSave(e) {
|
|
81
|
+
const { uri } = e.payload;
|
|
82
|
+
// 手动保存的立刻上报
|
|
83
|
+
// 标记文件链接
|
|
84
|
+
this._markFileUri(uri, ContentUpdateOperation.Update);
|
|
85
|
+
}
|
|
86
|
+
handleEditorDocModelDidSave(e) {
|
|
87
|
+
const uri = e.payload;
|
|
88
|
+
this._reportFileOperation(uri, ContentUpdateOperation.Update, FileOperationResultEnum.SUCCESS);
|
|
89
|
+
}
|
|
90
|
+
_participateFileOperation() {
|
|
91
|
+
// BEFORE file operation
|
|
92
|
+
this.addDispose(this.workspaceFileService.registerFileOperationParticipant({
|
|
93
|
+
participate: this.fileOperationParticipant.bind(this),
|
|
94
|
+
}));
|
|
95
|
+
// AFTER file operation SUCCEED
|
|
96
|
+
this.addDispose(this.workspaceFileService.onDidRunWorkspaceFileOperation(this._handleFileOperationDidRun.bind(this)));
|
|
97
|
+
// AFTER file operation FAILED
|
|
98
|
+
this.addDispose(this.workspaceFileService.onDidFailWorkspaceFileOperation(this._handleFileOperationDidFail.bind(this)));
|
|
99
|
+
}
|
|
100
|
+
async fileOperationParticipant(...args) {
|
|
101
|
+
const [files, operation] = args;
|
|
102
|
+
for (const file of files) {
|
|
103
|
+
this._markFileUri(new ide_core_common_1.URI(file.target), operation);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* refactoring changes 带来的文件增删也会带进来,但是一般来说比较少见
|
|
108
|
+
* 出于性能考虑,删除文件的设计是异步操作的,因此删除文件可能耗时比肉眼可见的要长一些
|
|
109
|
+
*/
|
|
110
|
+
_handleFileOperationDidRun(e) {
|
|
111
|
+
const { files, operation } = e;
|
|
112
|
+
for (const file of files) {
|
|
113
|
+
this._reportFileOperation(new ide_core_common_1.URI(file.target), operation, FileOperationResultEnum.SUCCESS);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
_handleFileOperationDidFail(e) {
|
|
117
|
+
const { files, operation } = e;
|
|
118
|
+
for (const file of files) {
|
|
119
|
+
this._reportFileOperation(new ide_core_common_1.URI(file.target), operation, FileOperationResultEnum.FAIL);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
async _markFileUri(uri, operation) {
|
|
123
|
+
const shouldReport = await this._shouldReport(uri);
|
|
124
|
+
if (!shouldReport) {
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
const uriStr = uri.toString(true);
|
|
128
|
+
this._markedFileUris.set(uriStr, {
|
|
129
|
+
start: Date.now(),
|
|
130
|
+
operation,
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
async _reportFileOperation(uri, operation, result) {
|
|
134
|
+
const shouldReport = await this._shouldReport(uri);
|
|
135
|
+
if (!shouldReport) {
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
const uriStr = uri.toString(true);
|
|
139
|
+
const existedMarker = this._markedFileUris.get(uriStr);
|
|
140
|
+
// 不存在标记 | 标记的行为不匹配的 均过滤掉
|
|
141
|
+
if (!existedMarker || existedMarker.operation !== operation) {
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
// report here
|
|
145
|
+
this.reporterService.point('FileAndContentOperation', FileOperationMsgMapStr[existedMarker.operation] || 'unknown', {
|
|
146
|
+
uri: uriStr,
|
|
147
|
+
time: Date.now() - existedMarker.start,
|
|
148
|
+
result: result === FileOperationResultEnum.SUCCESS ? 0 : 1,
|
|
149
|
+
});
|
|
150
|
+
// delete cached
|
|
151
|
+
this._markedFileUris.delete(uriStr);
|
|
152
|
+
}
|
|
153
|
+
_initTraceConfig() {
|
|
154
|
+
// additional edits for file-participants
|
|
155
|
+
this._traceConfig = !!this.preferenceService.get(TRACE_LOG_FLAG);
|
|
156
|
+
this.addDispose(this.preferenceService.onPreferenceChanged((e) => {
|
|
157
|
+
if (e.preferenceName === TRACE_LOG_FLAG) {
|
|
158
|
+
this._traceConfig = !!e.newValue;
|
|
159
|
+
}
|
|
160
|
+
}));
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* 不符合要求的文件直接跳过
|
|
164
|
+
*/
|
|
165
|
+
async _shouldReport(uri) {
|
|
166
|
+
// 配置项关闭则直接跳过记录
|
|
167
|
+
if (!this._traceConfig) {
|
|
168
|
+
return false;
|
|
169
|
+
}
|
|
170
|
+
// 非当前 workspace 的文件不统计 | 非 file 协议不统计
|
|
171
|
+
if (uri.scheme !== 'file') {
|
|
172
|
+
return false;
|
|
173
|
+
}
|
|
174
|
+
// 文件是当前 workspace 下的
|
|
175
|
+
const roots = await this.workspaceService.roots;
|
|
176
|
+
return roots.some((fileStat) => !!new ide_core_common_1.URI(fileStat.uri).relative(uri));
|
|
177
|
+
}
|
|
178
|
+
};
|
|
179
|
+
(0, tslib_1.__decorate)([
|
|
180
|
+
(0, di_1.Autowired)(ide_workspace_edit_1.IWorkspaceFileService),
|
|
181
|
+
(0, tslib_1.__metadata)("design:type", Object)
|
|
182
|
+
], FileAndContentUpdateTimeContribution.prototype, "workspaceFileService", void 0);
|
|
183
|
+
(0, tslib_1.__decorate)([
|
|
184
|
+
(0, di_1.Autowired)(ide_core_browser_2.PreferenceService),
|
|
185
|
+
(0, tslib_1.__metadata)("design:type", Object)
|
|
186
|
+
], FileAndContentUpdateTimeContribution.prototype, "preferenceService", void 0);
|
|
187
|
+
(0, tslib_1.__decorate)([
|
|
188
|
+
(0, di_1.Autowired)(ide_workspace_1.IWorkspaceService),
|
|
189
|
+
(0, tslib_1.__metadata)("design:type", Object)
|
|
190
|
+
], FileAndContentUpdateTimeContribution.prototype, "workspaceService", void 0);
|
|
191
|
+
(0, tslib_1.__decorate)([
|
|
192
|
+
(0, di_1.Autowired)(ide_core_common_1.IReporterService),
|
|
193
|
+
(0, tslib_1.__metadata)("design:type", Object)
|
|
194
|
+
], FileAndContentUpdateTimeContribution.prototype, "reporterService", void 0);
|
|
195
|
+
(0, tslib_1.__decorate)([
|
|
196
|
+
(0, di_1.Autowired)(ide_core_browser_2.PreferenceSchemaProvider),
|
|
197
|
+
(0, tslib_1.__metadata)("design:type", ide_core_browser_2.PreferenceSchemaProvider)
|
|
198
|
+
], FileAndContentUpdateTimeContribution.prototype, "preferenceSchemaProvider", void 0);
|
|
199
|
+
(0, tslib_1.__decorate)([
|
|
200
|
+
(0, ide_core_common_1.debounce)(500),
|
|
201
|
+
(0, ide_core_common_1.OnEvent)(browser_1.EditorDocumentModelWillSaveEvent),
|
|
202
|
+
(0, tslib_1.__metadata)("design:type", Function),
|
|
203
|
+
(0, tslib_1.__metadata)("design:paramtypes", [browser_1.EditorDocumentModelWillSaveEvent]),
|
|
204
|
+
(0, tslib_1.__metadata)("design:returntype", void 0)
|
|
205
|
+
], FileAndContentUpdateTimeContribution.prototype, "handleEditorDocModelWillSave", null);
|
|
206
|
+
(0, tslib_1.__decorate)([
|
|
207
|
+
(0, ide_core_common_1.debounce)(500),
|
|
208
|
+
(0, ide_core_common_1.OnEvent)(browser_1.EditorDocumentModelSavedEvent),
|
|
209
|
+
(0, tslib_1.__metadata)("design:type", Function),
|
|
210
|
+
(0, tslib_1.__metadata)("design:paramtypes", [browser_1.EditorDocumentModelSavedEvent]),
|
|
211
|
+
(0, tslib_1.__metadata)("design:returntype", void 0)
|
|
212
|
+
], FileAndContentUpdateTimeContribution.prototype, "handleEditorDocModelDidSave", null);
|
|
213
|
+
FileAndContentUpdateTimeContribution = (0, tslib_1.__decorate)([
|
|
214
|
+
(0, di_1.Injectable)(),
|
|
215
|
+
(0, ide_core_browser_1.Domain)(ide_core_browser_1.ClientAppContribution),
|
|
216
|
+
(0, tslib_1.__metadata)("design:paramtypes", [])
|
|
217
|
+
], FileAndContentUpdateTimeContribution);
|
|
218
|
+
exports.FileAndContentUpdateTimeContribution = FileAndContentUpdateTimeContribution;
|
|
219
|
+
//# sourceMappingURL=file-content-update-time.contribution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-content-update-time.contribution.js","sourceRoot":"","sources":["../../src/browser/file-content-update-time.contribution.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { IFileDropFrontendService } from '../common';
|
|
2
|
+
import { FileTreeDropEvent, WithEventBus } from '@opensumi/ide-core-common';
|
|
3
|
+
export declare class FileDropContribution extends WithEventBus {
|
|
4
|
+
protected readonly dropService: IFileDropFrontendService;
|
|
5
|
+
onDidDropFile(e: FileTreeDropEvent): void;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=file-drop.contribution.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-drop.contribution.d.ts","sourceRoot":"","sources":["../../src/browser/file-drop.contribution.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,wBAAwB,EAAiC,MAAM,WAAW,CAAC;AACpF,OAAO,EAAW,iBAAiB,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAErF,qBAEa,oBAAqB,SAAQ,YAAY;IAGpD,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,wBAAwB,CAAC;IAGzD,aAAa,CAAC,CAAC,EAAE,iBAAiB;CAGnC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FileDropContribution = 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 common_1 = require("../common");
|
|
8
|
+
const ide_core_common_1 = require("@opensumi/ide-core-common");
|
|
9
|
+
let FileDropContribution = class FileDropContribution extends ide_core_common_1.WithEventBus {
|
|
10
|
+
onDidDropFile(e) {
|
|
11
|
+
this.dropService.onDidDropFile(e);
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
(0, tslib_1.__decorate)([
|
|
15
|
+
(0, di_1.Autowired)(common_1.IFileDropFrontendServiceToken),
|
|
16
|
+
(0, tslib_1.__metadata)("design:type", Object)
|
|
17
|
+
], FileDropContribution.prototype, "dropService", void 0);
|
|
18
|
+
(0, tslib_1.__decorate)([
|
|
19
|
+
(0, ide_core_common_1.OnEvent)(ide_core_common_1.FileTreeDropEvent),
|
|
20
|
+
(0, tslib_1.__metadata)("design:type", Function),
|
|
21
|
+
(0, tslib_1.__metadata)("design:paramtypes", [ide_core_common_1.FileTreeDropEvent]),
|
|
22
|
+
(0, tslib_1.__metadata)("design:returntype", void 0)
|
|
23
|
+
], FileDropContribution.prototype, "onDidDropFile", null);
|
|
24
|
+
FileDropContribution = (0, tslib_1.__decorate)([
|
|
25
|
+
(0, di_1.Injectable)(),
|
|
26
|
+
(0, ide_core_browser_1.Domain)(ide_core_browser_1.ClientAppContribution)
|
|
27
|
+
], FileDropContribution);
|
|
28
|
+
exports.FileDropContribution = FileDropContribution;
|
|
29
|
+
//# sourceMappingURL=file-drop.contribution.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-drop.contribution.js","sourceRoot":"","sources":["../../src/browser/file-drop.contribution.ts"],"names":[],"mappings":";;;;AAAA,qCAAqD;AACrD,iEAA2E;AAC3E,sCAAoF;AACpF,+DAAqF;AAIrF,IAAa,oBAAoB,GAAjC,MAAa,oBAAqB,SAAQ,8BAAY;IAMpD,aAAa,CAAC,CAAoB;QAChC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC;CACF,CAAA;AANC;IADC,IAAA,cAAS,EAAC,sCAA6B,CAAC;;yDACgB;AAGzD;IADC,IAAA,yBAAO,EAAC,mCAAiB,CAAC;;kDACV,mCAAiB;;yDAEjC;AARU,oBAAoB;IAFhC,IAAA,eAAU,GAAE;IACZ,IAAA,yBAAM,EAAC,wCAAqB,CAAC;GACjB,oBAAoB,CAShC;AATY,oDAAoB"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { WithEventBus } from '@opensumi/ide-core-common/lib';
|
|
2
|
+
import { FileTreeDropEvent } from '@opensumi/ide-core-common/lib/types/dnd';
|
|
3
|
+
import { IStatusBarService } from '@opensumi/ide-core-browser/lib/services';
|
|
4
|
+
import { IFileDropFrontendService, IFileDropBackendService } from '../common';
|
|
5
|
+
import { IFileServiceClient } from '@opensumi/ide-file-service/lib/common';
|
|
6
|
+
export declare class FileDropService extends WithEventBus implements IFileDropFrontendService {
|
|
7
|
+
private pending;
|
|
8
|
+
protected readonly fs: IFileServiceClient;
|
|
9
|
+
protected readonly dropService: IFileDropBackendService;
|
|
10
|
+
protected readonly statusBarService: IStatusBarService;
|
|
11
|
+
private uploadStatus?;
|
|
12
|
+
private onDidUploadFileStart;
|
|
13
|
+
private onDidUploadFileEnd;
|
|
14
|
+
private createOrUpdateStatusBar;
|
|
15
|
+
onDidDropFile(e: FileTreeDropEvent): void;
|
|
16
|
+
private processFilesEntry;
|
|
17
|
+
private toBinaryString;
|
|
18
|
+
private doUploadFile;
|
|
19
|
+
private processFileEntry;
|
|
20
|
+
private processDirEntry;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=file-drop.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-drop.service.d.ts","sourceRoot":"","sources":["../../src/browser/file-drop.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAE7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,yCAAyC,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAA8C,MAAM,yCAAyC,CAAC;AACxH,OAAO,EAAE,wBAAwB,EAAE,uBAAuB,EAA0E,MAAM,WAAW,CAAC;AAEtJ,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAE3E,qBACa,eAAgB,SAAQ,YAAa,YAAW,wBAAwB;IAEnF,OAAO,CAAC,OAAO,CAA0B;IAGzC,SAAS,CAAC,QAAQ,CAAC,EAAE,EAAE,kBAAkB,CAAC;IAG1C,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,uBAAuB,CAAC;IAGxD,SAAS,CAAC,QAAQ,CAAC,gBAAgB,EAAE,iBAAiB,CAAC;IAEvD,OAAO,CAAC,YAAY,CAAC,CAAyB;IAE9C,OAAO,CAAC,oBAAoB;IAK5B,OAAO,CAAC,kBAAkB;IAK1B,OAAO,CAAC,uBAAuB;IAyB/B,aAAa,CAAC,CAAC,EAAE,iBAAiB;YAwBpB,iBAAiB;IAU/B,OAAO,CAAC,cAAc;YAUR,YAAY;IAkB1B,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,eAAe;CASxB"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FileDropService = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const di_1 = require("@opensumi/di");
|
|
6
|
+
const lib_1 = require("@opensumi/ide-core-common/lib");
|
|
7
|
+
const lib_2 = require("@opensumi/ide-core-browser/lib");
|
|
8
|
+
const services_1 = require("@opensumi/ide-core-browser/lib/services");
|
|
9
|
+
const common_1 = require("../common");
|
|
10
|
+
const path_1 = require("@opensumi/ide-components/lib/utils/path");
|
|
11
|
+
const common_2 = require("@opensumi/ide-file-service/lib/common");
|
|
12
|
+
let FileDropService = class FileDropService extends lib_1.WithEventBus {
|
|
13
|
+
constructor() {
|
|
14
|
+
super(...arguments);
|
|
15
|
+
this.pending = new Set();
|
|
16
|
+
}
|
|
17
|
+
onDidUploadFileStart(fullPath) {
|
|
18
|
+
this.pending.add(fullPath);
|
|
19
|
+
this.createOrUpdateStatusBar();
|
|
20
|
+
}
|
|
21
|
+
onDidUploadFileEnd(fullPath) {
|
|
22
|
+
this.pending.delete(fullPath);
|
|
23
|
+
this.createOrUpdateStatusBar();
|
|
24
|
+
}
|
|
25
|
+
createOrUpdateStatusBar(speed) {
|
|
26
|
+
if (this.pending.size === 0) {
|
|
27
|
+
if (this.uploadStatus) {
|
|
28
|
+
this.uploadStatus.dispose();
|
|
29
|
+
this.uploadStatus = undefined;
|
|
30
|
+
}
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
const entryId = 'sumi-upload-file-status';
|
|
34
|
+
const message = (0, lib_2.formatLocalize)('workbench.uploadingFiles', this.pending.size, speed || '0 MB');
|
|
35
|
+
const entry = {
|
|
36
|
+
text: message,
|
|
37
|
+
alignment: services_1.StatusBarAlignment.RIGHT,
|
|
38
|
+
tooltip: message,
|
|
39
|
+
iconClass: 'kaitian-icon kticon-cloud-server',
|
|
40
|
+
};
|
|
41
|
+
if (!this.uploadStatus) {
|
|
42
|
+
this.uploadStatus = this.statusBarService.addElement(entryId, entry);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
this.uploadStatus.update(Object.assign({ id: entryId }, entry));
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
onDidDropFile(e) {
|
|
49
|
+
var _a;
|
|
50
|
+
const { payload: { event, targetDir } } = e;
|
|
51
|
+
if (!targetDir || !((_a = event.dataTransfer) === null || _a === void 0 ? void 0 : _a.files) || event.dataTransfer.files.length === 0) {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
const items = event.dataTransfer.items;
|
|
55
|
+
let uploadedBytes = 0;
|
|
56
|
+
const startTime = Date.now();
|
|
57
|
+
const reporter = (uploaded) => {
|
|
58
|
+
uploadedBytes += uploaded;
|
|
59
|
+
const now = Date.now();
|
|
60
|
+
const bytesUploadedPerSecond = uploadedBytes / ((now - startTime) / 1000);
|
|
61
|
+
const speed = `${(bytesUploadedPerSecond / 1024 / 1024).toFixed(2)} MB`;
|
|
62
|
+
this.createOrUpdateStatusBar(speed);
|
|
63
|
+
};
|
|
64
|
+
for (const item of items) {
|
|
65
|
+
const entry = item.webkitGetAsEntry();
|
|
66
|
+
this.processFilesEntry(targetDir, entry, reporter);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
async processFilesEntry(targetDir, entry, reporter) {
|
|
70
|
+
if (entry.isFile) {
|
|
71
|
+
this.processFileEntry(entry, targetDir, reporter);
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
const folder = lib_2.Uri.file(new path_1.Path(targetDir).join(entry.fullPath).toString()).toString();
|
|
75
|
+
await this.fs.createFolder(folder);
|
|
76
|
+
this.processDirEntry(entry, targetDir, reporter);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
toBinaryString(uint8Arr) {
|
|
80
|
+
let i;
|
|
81
|
+
const length = uint8Arr.length;
|
|
82
|
+
let resultString = '';
|
|
83
|
+
for (i = 0; i < length; i += 1) {
|
|
84
|
+
resultString += String.fromCharCode(uint8Arr[i]);
|
|
85
|
+
}
|
|
86
|
+
return resultString;
|
|
87
|
+
}
|
|
88
|
+
async doUploadFile(file, targetDir, reporter) {
|
|
89
|
+
var _a;
|
|
90
|
+
const filePath = new path_1.Path(targetDir).join(file.name).toString();
|
|
91
|
+
this.onDidUploadFileStart(filePath.toString());
|
|
92
|
+
await this.fs.createFile(lib_2.Uri.file(filePath.toString()).toString());
|
|
93
|
+
await this.dropService.ensureFileExist(file.name, targetDir);
|
|
94
|
+
const reader = file.stream().getReader();
|
|
95
|
+
let res = await reader.read();
|
|
96
|
+
while (!res.done) {
|
|
97
|
+
await this.dropService.writeStream(this.toBinaryString(res.value), file.name, targetDir, res.done);
|
|
98
|
+
reporter((_a = res.value) === null || _a === void 0 ? void 0 : _a.byteLength);
|
|
99
|
+
res = await reader.read();
|
|
100
|
+
}
|
|
101
|
+
if (res.done) {
|
|
102
|
+
this.onDidUploadFileEnd(filePath.toString());
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
processFileEntry(fileEntry, targetDir, reporter) {
|
|
106
|
+
fileEntry.file((fileChunk) => {
|
|
107
|
+
const file = new File([fileChunk], fileEntry.fullPath, { type: fileEntry.type });
|
|
108
|
+
this.doUploadFile(file, targetDir, reporter);
|
|
109
|
+
}, () => { });
|
|
110
|
+
}
|
|
111
|
+
processDirEntry(entry, targetDir, reporter) {
|
|
112
|
+
const dirReader = entry.createReader();
|
|
113
|
+
dirReader.readEntries((entries) => {
|
|
114
|
+
entries.forEach(async (fileOrDirEntry) => {
|
|
115
|
+
this.processFilesEntry(targetDir, fileOrDirEntry, reporter);
|
|
116
|
+
});
|
|
117
|
+
}, () => { });
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
(0, tslib_1.__decorate)([
|
|
121
|
+
(0, di_1.Autowired)(common_2.IFileServiceClient),
|
|
122
|
+
(0, tslib_1.__metadata)("design:type", Object)
|
|
123
|
+
], FileDropService.prototype, "fs", void 0);
|
|
124
|
+
(0, tslib_1.__decorate)([
|
|
125
|
+
(0, di_1.Autowired)(common_1.FileDropServicePath),
|
|
126
|
+
(0, tslib_1.__metadata)("design:type", Object)
|
|
127
|
+
], FileDropService.prototype, "dropService", void 0);
|
|
128
|
+
(0, tslib_1.__decorate)([
|
|
129
|
+
(0, di_1.Autowired)(services_1.IStatusBarService),
|
|
130
|
+
(0, tslib_1.__metadata)("design:type", Object)
|
|
131
|
+
], FileDropService.prototype, "statusBarService", void 0);
|
|
132
|
+
FileDropService = (0, tslib_1.__decorate)([
|
|
133
|
+
(0, di_1.Injectable)()
|
|
134
|
+
], FileDropService);
|
|
135
|
+
exports.FileDropService = FileDropService;
|
|
136
|
+
//# sourceMappingURL=file-drop.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-drop.service.js","sourceRoot":"","sources":["../../src/browser/file-drop.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { CommandContribution, CommandRegistry, Command, CancellationToken, IReporterService } from '@opensumi/ide-core-common';
|
|
2
|
+
import { QuickOpenItem } from '@opensumi/ide-core-browser';
|
|
3
|
+
import { KeybindingContribution, KeybindingRegistry } from '@opensumi/ide-core-browser';
|
|
4
|
+
import { QuickOpenContribution, QuickOpenHandlerRegistry } from '@opensumi/ide-quick-open/lib/browser/prefix-quick-open.service';
|
|
5
|
+
import { QuickOpenModel, QuickOpenOptions, PrefixQuickOpenService } from '@opensumi/ide-quick-open';
|
|
6
|
+
export declare const quickFileOpen: Command;
|
|
7
|
+
export declare const quickGoToSymbol: Command;
|
|
8
|
+
export declare const matchLineReg: RegExp;
|
|
9
|
+
export declare function getValidateInput(input: string): string;
|
|
10
|
+
export declare class FileSearchQuickCommandHandler {
|
|
11
|
+
private readonly commandService;
|
|
12
|
+
private readonly fileSearchService;
|
|
13
|
+
private readonly workbenchEditorService;
|
|
14
|
+
private documentSymbolStore;
|
|
15
|
+
private readonly labelService;
|
|
16
|
+
private readonly workspaceService;
|
|
17
|
+
private readonly recentFilesManager;
|
|
18
|
+
private readonly logger;
|
|
19
|
+
private readonly fileSearchActionProvider;
|
|
20
|
+
private readonly preferenceService;
|
|
21
|
+
reporterService: IReporterService;
|
|
22
|
+
private cancelIndicator;
|
|
23
|
+
readonly default: boolean;
|
|
24
|
+
readonly prefix: string;
|
|
25
|
+
readonly description: string;
|
|
26
|
+
private prevEditorState;
|
|
27
|
+
private prevSelected;
|
|
28
|
+
currentLookFor: string;
|
|
29
|
+
getModel(): QuickOpenModel;
|
|
30
|
+
getOptions(): QuickOpenOptions;
|
|
31
|
+
onClose(canceled?: boolean): void;
|
|
32
|
+
onToggle(): void;
|
|
33
|
+
private trySaveEditorState;
|
|
34
|
+
private getFindOutItems;
|
|
35
|
+
protected getQueryFiles(fileQuery: string, alreadyCollected: Set<string>, token: CancellationToken): Promise<QuickOpenItem[]>;
|
|
36
|
+
private flattenSymbols;
|
|
37
|
+
private getRecentlyItems;
|
|
38
|
+
private getItems;
|
|
39
|
+
private openFile;
|
|
40
|
+
private locateSymbol;
|
|
41
|
+
/**
|
|
42
|
+
* Compare two `QuickOpenItem`.
|
|
43
|
+
*
|
|
44
|
+
* @param a `QuickOpenItem` for comparison.
|
|
45
|
+
* @param b `QuickOpenItem` for comparison.
|
|
46
|
+
* @param member the `QuickOpenItem` object member for comparison.
|
|
47
|
+
*/
|
|
48
|
+
private compareItems;
|
|
49
|
+
private getPreferenceSearchExcludes;
|
|
50
|
+
}
|
|
51
|
+
export declare class FileSearchContribution implements CommandContribution, KeybindingContribution, QuickOpenContribution {
|
|
52
|
+
protected fileSearchQuickCommandHandler: FileSearchQuickCommandHandler;
|
|
53
|
+
protected readonly quickOpenService: PrefixQuickOpenService;
|
|
54
|
+
registerQuickOpenHandlers(quickOpenHandlerRegistry: QuickOpenHandlerRegistry): void;
|
|
55
|
+
registerCommands(commands: CommandRegistry): void;
|
|
56
|
+
registerKeybindings(keybindings: KeybindingRegistry): void;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=file-search.contribution.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-search.contribution.d.ts","sourceRoot":"","sources":["../../src/browser/file-search.contribution.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,OAAO,EAGP,iBAAiB,EAEjB,gBAAgB,EAEjB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAOL,aAAa,EAKd,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAW,MAAM,4BAA4B,CAAC;AAEjG,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,gEAAgE,CAAC;AACjI,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,sBAAsB,EAAuB,MAAM,0BAA0B,CAAC;AAUzH,eAAO,MAAM,aAAa,EAAE,OAI3B,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,OAI7B,CAAC;AAOF,eAAO,MAAM,YAAY,QAA6C,CAAC;AAsBvE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,UAE7C;AAgDD,qBACa,6BAA6B;IAGxC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAGhD,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAqB;IAGvD,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAyB;IAGhE,OAAO,CAAC,mBAAmB,CAAsB;IAGjD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAG5C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAoB;IAGrD,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAqB;IAGxD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;IAGjC,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAA2B;IAGpE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAoB;IAGtD,eAAe,EAAE,gBAAgB,CAAC;IAElC,OAAO,CAAC,eAAe,CAAiC;IACxD,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAQ;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAS;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAwD;IACpF,OAAO,CAAC,eAAe,CAAqC;IAC5D,OAAO,CAAC,YAAY,CAAkB;IAEtC,cAAc,EAAE,MAAM,CAAM;IAE5B,QAAQ,IAAI,cAAc;IAsC1B,UAAU,IAAI,gBAAgB;IAiB9B,OAAO,CAAC,QAAQ,CAAC,EAAE,OAAO;IAa1B,QAAQ;IAKR,OAAO,CAAC,kBAAkB;YAyBZ,eAAe;cA2Eb,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,iBAAiB;YAmC1F,cAAc;YASd,gBAAgB;YAqBhB,QAAQ;IAkCtB,OAAO,CAAC,QAAQ;IAWhB,OAAO,CAAC,YAAY;IAOpB;;;;;;OAMG;IACH,OAAO,CAAC,YAAY;IAkFpB,OAAO,CAAC,2BAA2B;CAYpC;AAED,qBACa,sBAAuB,YAAW,mBAAmB,EAAE,sBAAsB,EAAE,qBAAqB;IAG/G,SAAS,CAAC,6BAA6B,EAAE,6BAA6B,CAAC;IAGvE,SAAS,CAAC,QAAQ,CAAC,gBAAgB,EAAE,sBAAsB,CAAC;IAE5D,yBAAyB,CAAC,wBAAwB,EAAE,wBAAwB;IAQ5E,gBAAgB,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI;IAajD,mBAAmB,CAAC,WAAW,EAAE,kBAAkB,GAAG,IAAI;CAO3D"}
|