diff --git a/out/panels/ConfigPanel.js b/out/panels/ConfigPanel.js index 5599bfd..f5572c4 100644 --- a/out/panels/ConfigPanel.js +++ b/out/panels/ConfigPanel.js @@ -55,16 +55,15 @@ class ConfigPanel { this.currentProjectId = ''; this.currentAircraftId = ''; this.currentContainerId = ''; - this.currentRepoId = ''; + this.currentModuleFolderId = ''; // 数据存储 this.projects = []; this.aircrafts = []; this.containers = []; this.configs = []; - this.gitRepos = []; // Git 仓库数据 - this.mergedFolders = []; + this.moduleFolders = []; // 统一的模块文件夹数据 // Git 文件树 - this.currentRepoFileTree = []; + this.currentModuleFolderFileTree = []; // 项目存储路径映射 this.projectPaths = new Map(); // Webview 状态跟踪 @@ -129,7 +128,7 @@ class ConfigPanel { this.currentProjectId = ''; this.currentAircraftId = ''; this.currentContainerId = ''; - this.currentRepoId = ''; + this.currentModuleFolderId = ''; this.updateWebview(); break; case 'goBackToAircrafts': @@ -194,20 +193,20 @@ class ConfigPanel { console.log('❌ 取消分支选择'); this.updateWebview(); break; - case 'loadGitRepo': - await this.loadGitRepo(data.repoId); + case 'loadModuleFolder': + await this.loadModuleFolder(data.folderId); break; - case 'syncGitRepo': - await this.syncGitRepo(data.repoId); + case 'syncGitModuleFolder': + await this.syncGitModuleFolder(data.folderId); break; - case 'deleteGitRepo': - await this.deleteGitRepo(data.repoId); + case 'deleteModuleFolder': + await this.deleteModuleFolder(data.folderId); break; case 'importGitFile': await this.importGitFile(data.filePath); break; - case 'openGitRepoInVSCode': - await this.openTheModuleFolder('git', data.repoId); + case 'openModuleFolderInVSCode': + await this.openTheModuleFolder(data.moduleType, data.folderId); break; case 'openConfigFileInVSCode': await this.openConfigFileInVSCode(data.configId); @@ -216,7 +215,7 @@ class ConfigPanel { await this.mergeConfigs(data.configIds, data.displayName, data.folderName); break; case 'deleteMergedFolder': - await this.deleteMergedFolder(data.folderId); + await this.deleteModuleFolder(data.folderId); break; case 'openMergedFolderInVSCode': await this.openTheModuleFolder('merged', data.folderId); @@ -316,9 +315,9 @@ class ConfigPanel { } // === Git 仓库管理方法 === /** - * 添加 Git 仓库到容器目录 + * 添加 Git 模块文件夹到容器目录 */ - async addGitRepo(url, name, branch) { + async addGitModuleFolder(url, name, branch) { try { // 验证 URL if (!url || !url.startsWith('http')) { @@ -329,8 +328,8 @@ class ConfigPanel { vscode.window.showErrorMessage('请先选择容器'); return; } - const repoId = 'git-' + Date.now(); - // 构建本地路径 - 在容器目录下创建分支子目录 + const folderId = 'git-' + Date.now(); + // 构建本地路径 const container = this.containers.find(c => c.id === this.currentContainerId); if (!container) { vscode.window.showErrorMessage('未找到容器'); @@ -346,33 +345,30 @@ class ConfigPanel { vscode.window.showErrorMessage('未找到项目路径'); return; } - // 为每个分支创建独立的子目录 - const branchName = branch || 'main'; - const branchSafeName = branchName.replace(/[^a-zA-Z0-9-_]/g, '-'); - const repoDirName = name; - // 路径:项目路径/飞行器名/容器名/仓库名-分支名/ - const localPath = path.join(projectPath, aircraft.name, container.name, repoDirName); - console.log(`📁 Git仓库将保存到: ${localPath}`); - // 检查是否已存在相同 URL 和分支的仓库 - const existingRepo = this.gitRepos.find(repo => repo.url === url && repo.branch === branchName && repo.containerId === this.currentContainerId); - if (existingRepo) { - vscode.window.showWarningMessage('该 Git 仓库和分支组合已存在'); + // 构建相对路径(从项目路径开始) + const relativePath = `/${aircraft.projectId}/${aircraft.name}/${container.name}/${name}`; + // 完整路径用于实际操作 + const localPath = path.join(projectPath, aircraft.name, container.name, name); + console.log(`📁 Git模块文件夹将保存到: ${localPath}`); + console.log(`📁 相对路径: ${relativePath}`); + // 检查是否已存在相同名称的模块文件夹 + const existingFolder = this.moduleFolders.find(folder => folder.name === name && folder.containerId === this.currentContainerId); + if (existingFolder) { + vscode.window.showWarningMessage('该名称的模块文件夹已存在'); return; } - const newRepo = { - id: repoId, - name: `${name} (${branchName})`, - url: url, - localPath: localPath, - branch: branchName, - lastSync: new Date().toLocaleString(), + const newFolder = { + id: folderId, + name: name, + type: 'git', + localPath: relativePath, containerId: this.currentContainerId }; - console.log(`📁 准备克隆仓库: ${name}, 分支: ${newRepo.branch}, 路径: ${localPath}`); + console.log(`📁 准备克隆仓库: ${name}, 分支: ${branch}, 路径: ${localPath}`); // 显示进度 await vscode.window.withProgress({ location: vscode.ProgressLocation.Notification, - title: `正在克隆仓库: ${name} (${newRepo.branch})`, + title: `正在克隆仓库: ${name}`, cancellable: false }, async (progress) => { progress.report({ increment: 0 }); @@ -403,7 +399,7 @@ class ConfigPanel { url: url, singleBranch: true, depth: 1, - ref: branchName, + ref: branch || 'main', onProgress: (event) => { if (event.total) { const percent = (event.loaded / event.total) * 100; @@ -412,17 +408,17 @@ class ConfigPanel { } }); console.log('✅ Git克隆成功完成'); - this.gitRepos.push(newRepo); + this.moduleFolders.push(newFolder); await this.saveCurrentProjectData(); - console.log('✅ Git仓库数据已保存到项目文件'); - vscode.window.showInformationMessage(`Git 仓库克隆成功: ${name} (${newRepo.branch})`); + console.log('✅ Git模块文件夹数据已保存到项目文件'); + vscode.window.showInformationMessage(`Git 仓库克隆成功: ${name}`); // 检查 Webview 状态后再加载文件树 if (!this.isWebviewDisposed) { - console.log('🌳 开始加载仓库文件树...'); - // 自动加载仓库文件树 - this.currentRepoId = repoId; - await this.loadGitRepoFileTree(repoId); - console.log('✅ 仓库文件树加载完成'); + console.log('🌳 开始加载模块文件夹文件树...'); + // 自动加载文件树 + this.currentModuleFolderId = folderId; + await this.loadModuleFolderFileTree(folderId); + console.log('✅ 模块文件夹文件树加载完成'); } else { console.log('⚠️ Webview 已被销毁,跳过文件树加载'); @@ -435,30 +431,39 @@ class ConfigPanel { }); } catch (error) { - console.error('❌ 在addGitRepo外部捕获错误:', error); - vscode.window.showErrorMessage(`添加 Git 仓库失败: ${error}`); + console.error('❌ 在addGitModuleFolder外部捕获错误:', error); + vscode.window.showErrorMessage(`添加 Git 模块文件夹失败: ${error}`); } } /** - * 加载 Git 仓库文件树 + * 加载模块文件夹 */ - async loadGitRepo(repoId) { - this.currentRepoId = repoId; - await this.loadGitRepoFileTree(repoId); + async loadModuleFolder(folderId) { + this.currentModuleFolderId = folderId; + const folder = this.moduleFolders.find(f => f.id === folderId); + if (folder && folder.type === 'git') { + await this.loadModuleFolderFileTree(folderId); + } this.updateWebview(); } /** - * 同步 Git 仓库 + * 同步 Git 模块文件夹 */ - async syncGitRepo(repoId) { - const repo = this.gitRepos.find(r => r.id === repoId); - if (!repo) { - vscode.window.showErrorMessage('未找到指定的 Git 仓库'); + async syncGitModuleFolder(folderId) { + const folder = this.moduleFolders.find(f => f.id === folderId); + if (!folder || folder.type !== 'git') { + vscode.window.showErrorMessage('未找到指定的 Git 模块文件夹'); + return; + } + // 获取完整路径 + const fullPath = this.getModuleFolderFullPath(folder); + if (!fullPath) { + vscode.window.showErrorMessage('无法获取模块文件夹的完整路径'); return; } await vscode.window.withProgress({ location: vscode.ProgressLocation.Notification, - title: `正在同步仓库: ${repo.name}`, + title: `正在同步仓库: ${folder.name}`, cancellable: false }, async (progress) => { try { @@ -467,16 +472,13 @@ class ConfigPanel { await isomorphic_git_1.default.pull({ fs: fs, http: node_1.default, - dir: repo.localPath, + dir: fullPath, author: { name: 'DCSP User', email: 'user@dcsp.local' }, fastForward: true }); - // 更新最后同步时间 - repo.lastSync = new Date().toLocaleString(); - await this.saveCurrentProjectData(); // 重新加载文件树 - await this.loadGitRepoFileTree(repoId); - vscode.window.showInformationMessage(`Git 仓库同步成功: ${repo.name}`); + await this.loadModuleFolderFileTree(folderId); + vscode.window.showInformationMessage(`Git 仓库同步成功: ${folder.name}`); this.updateWebview(); } catch (error) { @@ -485,49 +487,52 @@ class ConfigPanel { }); } /** - * 删除 Git 仓库 + * 删除模块文件夹 */ - async deleteGitRepo(repoId) { - const repo = this.gitRepos.find(r => r.id === repoId); - if (!repo) + async deleteModuleFolder(folderId) { + const folder = this.moduleFolders.find(f => f.id === folderId); + if (!folder) return; - const confirm = await vscode.window.showWarningMessage(`确定要删除 Git 仓库 "${repo.name}" 吗?这将删除本地文件。`, { modal: true }, '确定删除', '取消'); + const confirm = await vscode.window.showWarningMessage(`确定要删除模块文件夹 "${folder.name}" 吗?这将删除本地文件。`, { modal: true }, '确定删除', '取消'); if (confirm === '确定删除') { try { - // 删除整个仓库目录(因为是独立目录) - await fs.promises.rm(repo.localPath, { recursive: true, force: true }); - // 从列表中移除 - this.gitRepos = this.gitRepos.filter(r => r.id !== repoId); - await this.saveCurrentProjectData(); - // 如果删除的是当前仓库,清空状态 - if (this.currentRepoId === repoId) { - this.currentRepoId = ''; - this.currentRepoFileTree = []; + // 获取完整路径并删除文件夹 + const fullPath = this.getModuleFolderFullPath(folder); + if (fullPath) { + await fs.promises.rm(fullPath, { recursive: true, force: true }); } - vscode.window.showInformationMessage(`Git 仓库已删除: ${repo.name}`); + // 从列表中移除 + this.moduleFolders = this.moduleFolders.filter(f => f.id !== folderId); + await this.saveCurrentProjectData(); + // 如果删除的是当前文件夹,清空状态 + if (this.currentModuleFolderId === folderId) { + this.currentModuleFolderId = ''; + this.currentModuleFolderFileTree = []; + } + vscode.window.showInformationMessage(`模块文件夹已删除: ${folder.name}`); this.updateWebview(); } catch (error) { - vscode.window.showErrorMessage(`删除 Git 仓库失败: ${error}`); + vscode.window.showErrorMessage(`删除模块文件夹失败: ${error}`); } } } /** - * 加载 Git 仓库文件树 + * 加载模块文件夹文件树 */ - async loadGitRepoFileTree(repoId) { + async loadModuleFolderFileTree(folderId) { // 检查 Webview 是否仍然有效 if (this.isWebviewDisposed) { console.log('⚠️ Webview 已被销毁,跳过文件树加载'); return; } - const repo = this.gitRepos.find(r => r.id === repoId); - if (!repo) + const folder = this.moduleFolders.find(f => f.id === folderId); + if (!folder) return; // 通知前端开始加载 try { this.panel.webview.postMessage({ - type: 'gitRepoLoading', + type: 'moduleFolderLoading', loading: true }); } @@ -536,15 +541,15 @@ class ConfigPanel { return; } try { - const fileTree = await this.buildFileTree(repo.localPath); - this.currentRepoFileTree = fileTree; - // 更新最后访问时间 - repo.lastSync = new Date().toLocaleString(); - await this.saveCurrentProjectData(); + const fullPath = this.getModuleFolderFullPath(folder); + if (fullPath) { + const fileTree = await this.buildFileTree(fullPath); + this.currentModuleFolderFileTree = fileTree; + } } catch (error) { - console.error('加载仓库文件树失败:', error); - this.currentRepoFileTree = []; + console.error('加载模块文件夹文件树失败:', error); + this.currentModuleFolderFileTree = []; } // 再次检查 Webview 状态 if (this.isWebviewDisposed) { @@ -554,7 +559,7 @@ class ConfigPanel { // 通知前端加载完成 try { this.panel.webview.postMessage({ - type: 'gitRepoLoading', + type: 'moduleFolderLoading', loading: false }); this.updateWebview(); @@ -607,13 +612,13 @@ class ConfigPanel { * 导入 Git 文件到当前容器 */ async importGitFile(filePath) { - if (!this.currentRepoId || !this.currentContainerId) { - vscode.window.showErrorMessage('请先选择 Git 仓库和容器'); + if (!this.currentModuleFolderId || !this.currentContainerId) { + vscode.window.showErrorMessage('请先选择模块文件夹和容器'); return; } - const repo = this.gitRepos.find(r => r.id === this.currentRepoId); - if (!repo) { - vscode.window.showErrorMessage('未找到当前 Git 仓库'); + const folder = this.moduleFolders.find(f => f.id === this.currentModuleFolderId); + if (!folder || folder.type !== 'git') { + vscode.window.showErrorMessage('未找到当前 Git 模块文件夹'); return; } const container = this.containers.find(c => c.id === this.currentContainerId); @@ -622,8 +627,13 @@ class ConfigPanel { return; } try { - const fullPath = path.join(repo.localPath, filePath); - const content = await fs.promises.readFile(fullPath, 'utf8'); + const fullPath = this.getModuleFolderFullPath(folder); + if (!fullPath) { + vscode.window.showErrorMessage('无法获取模块文件夹路径'); + return; + } + const fileFullPath = path.join(fullPath, filePath); + const content = await fs.promises.readFile(fileFullPath, 'utf8'); const fileName = path.basename(filePath); // 创建新配置 const newId = 'cfg' + (this.configs.length + 1); @@ -685,20 +695,18 @@ class ConfigPanel { const currentProjectContainers = this.containers.filter(c => currentAircraftIds.includes(c.aircraftId)); const currentContainerIds = currentProjectContainers.map(c => c.id); const currentProjectConfigs = this.configs.filter(cfg => currentContainerIds.includes(cfg.containerId)); - // 只保存与当前项目容器相关的 Git 仓库和合并文件夹 - const currentProjectGitRepos = this.gitRepos.filter(repo => currentContainerIds.includes(repo.containerId)); - const currentProjectMergedFolders = this.mergedFolders.filter(folder => currentContainerIds.includes(folder.containerId)); + // 只保存与当前项目容器相关的模块文件夹 + const currentProjectModuleFolders = this.moduleFolders.filter(folder => currentContainerIds.includes(folder.containerId)); const data = { projects: this.projects.filter(p => p.id === this.currentProjectId), aircrafts: currentProjectAircrafts, containers: currentProjectContainers, configs: currentProjectConfigs, - gitRepos: currentProjectGitRepos, - mergedFolders: currentProjectMergedFolders // 保存合并文件夹数据 + moduleFolders: currentProjectModuleFolders // 保存模块文件夹数据 }; const uint8Array = new TextEncoder().encode(JSON.stringify(data, null, 2)); await vscode.workspace.fs.writeFile(dataUri, uint8Array); - console.log('✅ 当前项目数据已保存,包含', currentProjectGitRepos.length, '个 Git 仓库和', currentProjectMergedFolders.length, '个合并文件夹'); + console.log('✅ 当前项目数据已保存,包含', currentProjectModuleFolders.length, '个模块文件夹'); } catch (error) { vscode.window.showErrorMessage(`保存项目数据失败: ${error}`); @@ -727,8 +735,7 @@ class ConfigPanel { this.aircrafts = []; this.containers = []; this.configs = []; - this.gitRepos = []; - this.mergedFolders = []; // 清空合并文件夹数据 + this.moduleFolders = []; // 清空模块文件夹数据 // 验证数据格式并加载 if (data.projects && Array.isArray(data.projects)) { this.projects = data.projects; @@ -742,11 +749,8 @@ class ConfigPanel { if (data.configs && Array.isArray(data.configs)) { this.configs = data.configs; } - if (data.gitRepos && Array.isArray(data.gitRepos)) { - this.gitRepos = data.gitRepos; - } - if (data.mergedFolders && Array.isArray(data.mergedFolders)) { - this.mergedFolders = data.mergedFolders; // 加载合并文件夹数据 + if (data.moduleFolders && Array.isArray(data.moduleFolders)) { + this.moduleFolders = data.moduleFolders; // 加载模块文件夹数据 } // 设置当前项目为第一个项目(如果有的话) if (this.projects.length > 0) { @@ -754,7 +758,7 @@ class ConfigPanel { this.projectPaths.set(this.currentProjectId, projectPath); this.currentView = 'aircrafts'; } - vscode.window.showInformationMessage(`项目数据已从 ${projectPath} 加载,包含 ${this.gitRepos.length} 个 Git 仓库和 ${this.mergedFolders.length} 个合并文件夹`); + vscode.window.showInformationMessage(`项目数据已从 ${projectPath} 加载,包含 ${this.moduleFolders.length} 个模块文件夹`); this.updateWebview(); return true; } @@ -905,8 +909,8 @@ class ConfigPanel { // 删除相关的配置 const containerIds = this.containers.filter(c => aircraftIds.includes(c.aircraftId)).map(c => c.id); this.configs = this.configs.filter(cfg => !containerIds.includes(cfg.containerId)); - // 删除相关的 Git 仓库 - this.gitRepos = this.gitRepos.filter(repo => !containerIds.includes(repo.containerId)); + // 删除相关的模块文件夹 + this.moduleFolders = this.moduleFolders.filter(folder => !containerIds.includes(folder.containerId)); // 删除项目路径映射 this.projectPaths.delete(projectId); vscode.window.showInformationMessage(`删除项目: ${project.name}`); @@ -953,8 +957,8 @@ class ConfigPanel { // 删除相关的配置 const containerIds = this.containers.filter(c => c.aircraftId === aircraftId).map(c => c.id); this.configs = this.configs.filter(cfg => !containerIds.includes(cfg.containerId)); - // 删除相关的 Git 仓库 - this.gitRepos = this.gitRepos.filter(repo => !containerIds.includes(repo.containerId)); + // 删除相关的模块文件夹 + this.moduleFolders = this.moduleFolders.filter(folder => !containerIds.includes(folder.containerId)); vscode.window.showInformationMessage(`删除飞行器: ${aircraft.name}`); await this.saveCurrentProjectData(); this.updateWebview(); @@ -1015,8 +1019,8 @@ class ConfigPanel { this.containers = this.containers.filter(c => c.id !== containerId); // 删除相关的配置 this.configs = this.configs.filter(cfg => cfg.containerId !== containerId); - // 删除相关的 Git 仓库 - this.gitRepos = this.gitRepos.filter(repo => repo.containerId !== containerId); + // 删除相关的模块文件夹 + this.moduleFolders = this.moduleFolders.filter(folder => folder.containerId !== containerId); vscode.window.showInformationMessage(`删除容器: ${container.name}`); await this.saveCurrentProjectData(); this.updateWebview(); @@ -1204,7 +1208,7 @@ class ConfigPanel { message: `克隆分支: ${branch} (${i + 1}/${branches.length})` }); console.log(`📥 克隆分支: ${branch}`); - await this.addGitRepo(url, this.generateRepoName(url, branch), branch); + await this.addGitModuleFolder(url, this.generateModuleFolderName(url, branch), branch); } }); vscode.window.showInformationMessage(`成功克隆 ${branches.length} 个分支`); @@ -1214,7 +1218,7 @@ class ConfigPanel { vscode.window.showErrorMessage(`克隆分支失败: ${error}`); } } - generateRepoName(url, branch) { + generateModuleFolderName(url, branch) { const repoName = url.split('/').pop()?.replace('.git', '') || 'unknown-repo'; const branchSafeName = branch.replace(/[^a-zA-Z0-9-_]/g, '-'); return `${repoName}-${branchSafeName}`; @@ -1257,18 +1261,16 @@ class ConfigPanel { case 'configs': const currentContainer = this.containers.find(c => c.id === this.currentContainerId); const containerConfigs = this.configs.filter(cfg => cfg.containerId === this.currentContainerId); - const currentRepo = this.gitRepos.find(r => r.id === this.currentRepoId); - // 获取当前容器的 Git 仓库和合并文件夹 - const containerGitRepos = this.gitRepos.filter(repo => repo.containerId === this.currentContainerId); - const containerMergedFolders = this.mergedFolders.filter(folder => folder.containerId === this.currentContainerId); + const currentModuleFolder = this.moduleFolders.find(f => f.id === this.currentModuleFolderId); + // 获取当前容器的模块文件夹 + const containerModuleFolders = this.moduleFolders.filter(folder => folder.containerId === this.currentContainerId); return this.configView.render({ container: currentContainer, configs: containerConfigs, - gitRepos: containerGitRepos, - currentGitRepo: currentRepo, - gitFileTree: this.currentRepoFileTree, - gitLoading: false, - mergedFolders: containerMergedFolders // 传递合并文件夹数据 + moduleFolders: containerModuleFolders, + currentModuleFolder: currentModuleFolder, + moduleFolderFileTree: this.currentModuleFolderFileTree, + moduleFolderLoading: false }); default: return this.projectView.render({ @@ -1277,26 +1279,27 @@ class ConfigPanel { }); } } - async openGitRepoInVSCode(repoId) { - const repo = this.gitRepos.find(r => r.id === repoId); - if (!repo) { - vscode.window.showErrorMessage('未找到指定的 Git 仓库'); + async openGitRepoInVSCode(folderId) { + const folder = this.moduleFolders.find(f => f.id === folderId); + if (!folder) { + vscode.window.showErrorMessage('未找到指定的模块文件夹'); return; } try { - // 检查仓库目录是否存在 - if (!fs.existsSync(repo.localPath)) { - vscode.window.showErrorMessage('Git 仓库目录不存在,请重新克隆'); + // 检查文件夹是否存在 + const fullPath = this.getModuleFolderFullPath(folder); + if (!fullPath || !fs.existsSync(fullPath)) { + vscode.window.showErrorMessage('模块文件夹目录不存在'); return; } // 使用 VSCode 的文件选择器让用户选择要打开的文件 const fileUri = await vscode.window.showOpenDialog({ - defaultUri: vscode.Uri.file(repo.localPath), + defaultUri: vscode.Uri.file(fullPath), canSelectFiles: true, canSelectFolders: false, canSelectMany: false, openLabel: '选择要打开的文件', - title: `在 ${repo.name} 中选择文件` + title: `在 ${folder.name} 中选择文件` }); if (fileUri && fileUri.length > 0) { // 打开选中的文件 @@ -1306,7 +1309,7 @@ class ConfigPanel { } } catch (error) { - vscode.window.showErrorMessage(`打开 Git 仓库文件失败: ${error}`); + vscode.window.showErrorMessage(`打开模块文件夹文件失败: ${error}`); } } async openConfigFileInVSCode(configId) { @@ -1401,19 +1404,18 @@ class ConfigPanel { console.log(`✅ 已创建配置文件: ${config.fileName}`); } } + // 构建相对路径 + const relativePath = `/${aircraft.projectId}/${aircraft.name}/${container.name}/${folderName}`; // 创建合并文件夹记录 const newFolder = { id: 'merged-' + Date.now(), - displayName: displayName, - folderName: folderName, - path: mergeFolderPath, - fileCount: copiedFiles.length, - containerId: this.currentContainerId, - originalConfigIds: configIds, - createdAt: new Date().toLocaleString() + name: displayName, + type: 'merged', + localPath: relativePath, + containerId: this.currentContainerId }; - // 添加到合并文件夹列表 - this.mergedFolders.push(newFolder); + // 添加到模块文件夹列表 + this.moduleFolders.push(newFolder); // 删除原始配置文件 for (const configId of configIds) { await this.deleteConfigInternal(configId); @@ -1421,7 +1423,7 @@ class ConfigPanel { // 保存数据 await this.saveCurrentProjectData(); vscode.window.showInformationMessage(`成功合并 ${selectedConfigs.length} 个配置文件到文件夹: ${folderName}`); - // 更新UI(不自动打开文件夹) + // 更新UI this.updateWebview(); } catch (error) { @@ -1461,50 +1463,28 @@ class ConfigPanel { console.error(`删除配置文件失败: ${error}`); } } - /** - * 删除合并文件夹 - */ - async deleteMergedFolder(folderId) { - const folder = this.mergedFolders.find(f => f.id === folderId); - if (!folder) - return; - const confirm = await vscode.window.showWarningMessage(`确定要删除合并文件夹 "${folder.displayName}" 吗?这将删除文件夹及其所有内容。`, { modal: true }, '确定删除', '取消'); - if (confirm === '确定删除') { - try { - // 删除文件夹及其所有内容 - await fs.promises.rm(folder.path, { recursive: true, force: true }); - // 从列表中移除 - this.mergedFolders = this.mergedFolders.filter(f => f.id !== folderId); - await this.saveCurrentProjectData(); - vscode.window.showInformationMessage(`合并文件夹已删除: ${folder.displayName}`); - this.updateWebview(); - } - catch (error) { - vscode.window.showErrorMessage(`删除合并文件夹失败: ${error}`); - } - } - } /** * 在 VSCode 中打开合并文件夹 */ async openMergedFolderInVSCode(folderId) { - const folder = this.mergedFolders.find(f => f.id === folderId); + const folder = this.moduleFolders.find(f => f.id === folderId); if (!folder) { - vscode.window.showErrorMessage('未找到指定的合并文件夹'); + vscode.window.showErrorMessage('未找到指定的模块文件夹'); return; } try { // 检查文件夹是否存在 - if (!fs.existsSync(folder.path)) { - vscode.window.showErrorMessage('合并文件夹不存在'); + const fullPath = this.getModuleFolderFullPath(folder); + if (!fullPath || !fs.existsSync(fullPath)) { + vscode.window.showErrorMessage('模块文件夹不存在'); return; } // 使用 VSCode 打开文件夹 - const folderUri = vscode.Uri.file(folder.path); + const folderUri = vscode.Uri.file(fullPath); vscode.commands.executeCommand('vscode.openFolder', folderUri, { forceNewWindow: false }); } catch (error) { - vscode.window.showErrorMessage(`打开合并文件夹失败: ${error}`); + vscode.window.showErrorMessage(`打开模块文件夹失败: ${error}`); } } /** @@ -1513,44 +1493,26 @@ class ConfigPanel { * @param id 模块 ID */ async openTheModuleFolder(type, id) { - let folderPath; - let folderName; - if (type === 'git') { - const repo = this.gitRepos.find(r => r.id === id); - if (!repo) { - vscode.window.showErrorMessage('未找到指定的 Git 仓库'); - return; - } - folderPath = repo.localPath; - folderName = repo.name; - } - else if (type === 'merged') { - const folder = this.mergedFolders.find(f => f.id === id); - if (!folder) { - vscode.window.showErrorMessage('未找到指定的合并文件夹'); - return; - } - folderPath = folder.path; - folderName = folder.displayName; - } - if (!folderPath) { - vscode.window.showErrorMessage('未找到文件夹路径'); + const folder = this.moduleFolders.find(f => f.id === id); + if (!folder) { + vscode.window.showErrorMessage('未找到指定的模块文件夹'); return; } try { // 检查文件夹是否存在 - if (!fs.existsSync(folderPath)) { - vscode.window.showErrorMessage(`${type === 'git' ? 'Git 仓库' : '合并文件夹'}目录不存在`); + const fullPath = this.getModuleFolderFullPath(folder); + if (!fullPath || !fs.existsSync(fullPath)) { + vscode.window.showErrorMessage('模块文件夹目录不存在'); return; } // 使用 VSCode 的文件选择器让用户选择要打开的文件 const fileUri = await vscode.window.showOpenDialog({ - defaultUri: vscode.Uri.file(folderPath), + defaultUri: vscode.Uri.file(fullPath), canSelectFiles: true, canSelectFolders: false, canSelectMany: false, openLabel: '选择要打开的文件', - title: `在 ${folderName} 中选择文件` + title: `在 ${folder.name} 中选择文件` }); if (fileUri && fileUri.length > 0) { // 打开选中的文件 @@ -1560,9 +1522,29 @@ class ConfigPanel { } } catch (error) { - vscode.window.showErrorMessage(`打开${type === 'git' ? 'Git 仓库' : '合并文件夹'}文件失败: ${error}`); + vscode.window.showErrorMessage(`打开模块文件夹文件失败: ${error}`); } } + /** + * 获取模块文件夹的完整路径 + */ + getModuleFolderFullPath(folder) { + const container = this.containers.find(c => c.id === folder.containerId); + if (!container) + return null; + const aircraft = this.aircrafts.find(a => a.id === container.aircraftId); + if (!aircraft) + return null; + const projectPath = this.projectPaths.get(aircraft.projectId); + if (!projectPath) + return null; + // 从相对路径解析出文件夹名称 + const pathParts = folder.localPath.split('/').filter(part => part); + if (pathParts.length < 4) + return null; + const folderName = pathParts[pathParts.length - 1]; + return path.join(projectPath, aircraft.name, container.name, folderName); + } } exports.ConfigPanel = ConfigPanel; //# sourceMappingURL=ConfigPanel.js.map \ No newline at end of file diff --git a/out/panels/ConfigPanel.js.map b/out/panels/ConfigPanel.js.map index b959a44..aee012b 100644 --- a/out/panels/ConfigPanel.js.map +++ b/out/panels/ConfigPanel.js.map @@ -1 +1 @@ -{"version":3,"file":"ConfigPanel.js","sourceRoot":"","sources":["../../src/panels/ConfigPanel.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAiC;AACjC,2CAA6B;AAC7B,uCAAyB;AACzB,oEAAiC;AACjC,oEAA4C;AAC5C,qDAAkD;AAClD,uDAAoD;AACpD,yDAAsD;AACtD,mDAAgD;AA0EhD,MAAa,WAAW;IAkCb,MAAM,CAAC,YAAY,CAAC,YAAwB;QAC/C,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,gBAAgB,EAAE,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC;QAEnF,IAAI,WAAW,CAAC,YAAY,EAAE;YAC1B,WAAW,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC9C,OAAO;SACV;QAED,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAC1C,MAAM,EACN,UAAU,EACV,MAAM,EACN;YACI,aAAa,EAAE,IAAI;YACnB,kBAAkB,EAAE,CAAC,YAAY,CAAC;YAClC,uBAAuB,EAAE,IAAI;SAChC,CACJ,CAAC;QAEF,WAAW,CAAC,YAAY,GAAG,IAAI,WAAW,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IACpE,CAAC;IAED,YAAmB,KAA0B,EAAE,YAAwB;QAnD/D,gBAAW,GAAwD,UAAU,CAAC;QAC9E,qBAAgB,GAAW,EAAE,CAAC;QAC9B,sBAAiB,GAAW,EAAE,CAAC;QAC/B,uBAAkB,GAAW,EAAE,CAAC;QAChC,kBAAa,GAAW,EAAE,CAAC;QAEnC,OAAO;QACC,aAAQ,GAAc,EAAE,CAAC;QACzB,cAAS,GAAe,EAAE,CAAC;QAC3B,eAAU,GAAgB,EAAE,CAAC;QAC7B,YAAO,GAAa,EAAE,CAAC;QACvB,aAAQ,GAAc,EAAE,CAAC,CAAC,WAAW;QACpC,kBAAa,GAAmB,EAAE,CAAC;QAE5C,UAAU;QACF,wBAAmB,GAAkB,EAAE,CAAC;QAEhD,WAAW;QACH,iBAAY,GAAwB,IAAI,GAAG,EAAE,CAAC;QAEtD,eAAe;QACP,sBAAiB,GAAY,KAAK,CAAC;QA+BvC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC,CAAC,QAAQ;QAExC,UAAU;QACV,IAAI,CAAC,WAAW,GAAG,IAAI,yBAAW,CAAC,YAAY,CAAC,CAAC;QACjD,IAAI,CAAC,YAAY,GAAG,IAAI,2BAAY,CAAC,YAAY,CAAC,CAAC;QACnD,IAAI,CAAC,aAAa,GAAG,IAAI,6BAAa,CAAC,YAAY,CAAC,CAAC;QACrD,IAAI,CAAC,UAAU,GAAG,IAAI,uBAAU,CAAC,YAAY,CAAC,CAAC;QAE/C,IAAI,CAAC,aAAa,EAAE,CAAC;QACrB,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAE5B,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,EAAE;YACzB,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC,SAAS;YACxC,WAAW,CAAC,YAAY,GAAG,SAAS,CAAC;QACzC,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,oBAAoB;QACxB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YAClD,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;YAErC,oBAAoB;YACpB,IAAI,IAAI,CAAC,iBAAiB,EAAE;gBACxB,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;gBACpC,OAAO;aACV;YAED,IAAI;gBACA,QAAQ,IAAI,CAAC,IAAI,EAAE;oBACf,KAAK,qBAAqB;wBACtB,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;wBACjC,MAAM;oBAEV,KAAK,kBAAkB;wBACnB,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;wBACpF,IAAI,YAAY,EAAE;4BACd,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;4BAC/B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC;4BACvC,IAAI,CAAC,aAAa,EAAE,CAAC;yBACxB;wBACD,MAAM;oBAEV,KAAK,aAAa;wBACd,aAAa;wBACb,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;wBAC/B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC;wBACvC,IAAI,CAAC,aAAa,EAAE,CAAC;wBACrB,MAAM;oBAEV,KAAK,oBAAoB;wBACrB,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC;wBAChC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC;wBACvC,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC;wBACzC,IAAI,CAAC,aAAa,EAAE,CAAC;wBACrB,MAAM;oBAEV,KAAK,qBAAqB;wBACtB,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;wBAC7B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,WAAW,CAAC;wBAC3C,IAAI,CAAC,aAAa,EAAE,CAAC;wBACrB,MAAM;oBAEV,cAAc;oBACd,KAAK,kBAAkB;wBACnB,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;wBAC9B,YAAY;wBACZ,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;wBAC3B,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;wBAC5B,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;wBAC7B,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;wBACxB,IAAI,CAAC,aAAa,EAAE,CAAC;wBACrB,MAAM;oBAEV,KAAK,mBAAmB;wBACpB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;wBAC/B,6BAA6B;wBAC7B,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;wBAC5B,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;wBAC7B,IAAI,CAAC,aAAa,EAAE,CAAC;wBACrB,MAAM;oBAEV,KAAK,oBAAoB;wBACrB,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC;wBAChC,gEAAgE;wBAChE,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;wBAC7B,IAAI,CAAC,aAAa,EAAE,CAAC;wBACrB,MAAM;oBAEV,KAAK,mBAAmB;wBACpB,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;wBACxD,MAAM;oBAEV,KAAK,eAAe;wBAChB,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBACpC,MAAM;oBAEV,KAAK,oBAAoB;wBACrB,MAAM,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;wBAC1D,MAAM;oBAEV,KAAK,gBAAgB;wBACjB,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBACrC,MAAM;oBAEV,KAAK,qBAAqB;wBACtB,MAAM,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;wBAC5D,MAAM;oBAEV,KAAK,iBAAiB;wBAClB,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBACtC,MAAM;oBAEV,KAAK,kBAAkB;wBACnB,MAAM,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;wBACtD,MAAM;oBAEV,KAAK,cAAc;wBACf,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBACnC,MAAM;oBAEV,KAAK,eAAe;wBAChB,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;wBACzC,MAAM;oBAEV,KAAK,gBAAgB;wBACjB,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;wBAC3C,MAAM;oBAEV,KAAK,iBAAiB;wBAClB,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;wBAC7C,MAAM;oBAEV,KAAK,cAAc;wBACf,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;wBACvC,MAAM;oBAEV,aAAa;oBACb,KAAK,eAAe;wBAChB,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;wBACpC,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;wBACnC,MAAM;oBAEV,KAAK,eAAe;wBAChB,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;wBACjC,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;wBAClD,MAAM;oBAEV,KAAK,uBAAuB;wBACxB,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;wBACxB,IAAI,CAAC,aAAa,EAAE,CAAC;wBACrB,MAAM;oBAEV,KAAK,aAAa;wBACd,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;wBACpC,MAAM;oBAEV,KAAK,aAAa;wBACd,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;wBACpC,MAAM;oBAEV,KAAK,eAAe;wBAChB,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;wBACtC,MAAM;oBAEV,KAAK,eAAe;wBAChB,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;wBACxC,MAAM;oBAEV,KAAK,qBAAqB;wBACtB,MAAM,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;wBACnD,MAAM;oBAEV,KAAK,wBAAwB;wBACzB,MAAM,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;wBACjD,MAAM;oBAEV,KAAK,cAAc;wBACf,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;wBAC3E,MAAM;oBAEV,KAAK,oBAAoB;wBACrB,MAAM,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;wBAC7C,MAAM;oBAEV,KAAK,0BAA0B;wBAC3B,MAAM,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;wBACxD,MAAM;oBAEV,KAAK,kBAAkB;wBACnB,MAAM,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;wBACxD,MAAM;oBAEV,KAAK,qBAAqB;wBACtB,MAAM,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;wBACzD,MAAM;iBACb;aACJ;YAAC,OAAO,KAAK,EAAE;gBACZ,OAAO,CAAC,KAAK,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;gBAC1C,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;oBACzB,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,YAAY,KAAK,EAAE,CAAC,CAAC;iBACvD;aACJ;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAED,iBAAiB;IAEjB;;OAEG;IACK,KAAK,CAAC,uBAAuB,CAAC,QAAkB;QACpD,IAAI;YACA,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAC9D,IAAI,CAAC,WAAW,EAAE;gBACd,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;gBAClC,OAAO;aACV;YAED,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;YAErF,UAAU;YACV,MAAM,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;YACvD,OAAO,CAAC,GAAG,CAAC,cAAc,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;SAEnD;QAAC,OAAO,KAAK,EAAE;YACZ,OAAO,CAAC,KAAK,CAAC,cAAc,KAAK,EAAE,CAAC,CAAC;SACxC;IACL,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,wBAAwB,CAAC,SAAoB;QACvD,IAAI;YACA,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,UAAU,CAAC,CAAC;YACzE,IAAI,CAAC,QAAQ,EAAE;gBACX,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;gBACnC,OAAO;aACV;YAED,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAC9D,IAAI,CAAC,WAAW,EAAE;gBACd,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;gBACjC,OAAO;aACV;YAED,qBAAqB;YACrB,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;YACrF,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;YAEtE,YAAY;YACZ,IAAI;gBACA,MAAM,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;aAC1D;YAAC,OAAO,KAAK,EAAE;gBACZ,eAAe;aAClB;YAED,SAAS;YACT,MAAM,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;YACxD,OAAO,CAAC,GAAG,CAAC,aAAa,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;SAEnD;QAAC,OAAO,KAAK,EAAE;YACZ,OAAO,CAAC,KAAK,CAAC,aAAa,KAAK,EAAE,CAAC,CAAC;SACvC;IACL,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,8BAA8B,CAAC,WAAmB;QAC5D,IAAI;YACA,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,WAAW,CAAC,CAAC;YAClE,IAAI,CAAC,SAAS;gBAAE,OAAO;YAEvB,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,UAAU,CAAC,CAAC;YACzE,IAAI,CAAC,QAAQ;gBAAE,OAAO;YAEtB,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAC9D,IAAI,CAAC,WAAW;gBAAE,OAAO;YAEzB,YAAY;YACZ,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;YACrF,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;YAEtE,MAAM,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;YACvD,MAAM,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;SAE3D;QAAC,OAAO,KAAK,EAAE;YACZ,OAAO,CAAC,KAAK,CAAC,eAAe,KAAK,EAAE,CAAC,CAAC;SACzC;IACL,CAAC;IAED,qBAAqB;IAErB;;OAEG;IACK,KAAK,CAAC,UAAU,CAAC,GAAW,EAAE,IAAY,EAAE,MAAe;QAC/D,IAAI;YACA,SAAS;YACT,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;gBACjC,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,CAAC;gBACpD,OAAO;aACV;YAED,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;gBAC1B,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;gBACzC,OAAO;aACV;YAED,MAAM,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAEnC,yBAAyB;YACzB,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,kBAAkB,CAAC,CAAC;YAC9E,IAAI,CAAC,SAAS,EAAE;gBACZ,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;gBACxC,OAAO;aACV;YAED,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,UAAU,CAAC,CAAC;YACzE,IAAI,CAAC,QAAQ,EAAE;gBACX,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;gBACzC,OAAO;aACV;YAED,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAC9D,IAAI,CAAC,WAAW,EAAE;gBACd,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;gBAC1C,OAAO;aACV;YAED,gBAAgB;YAChB,MAAM,UAAU,GAAG,MAAM,IAAI,MAAM,CAAC;YACpC,MAAM,cAAc,GAAG,UAAU,CAAC,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;YAClE,MAAM,WAAW,GAAG,IAAI,CAAC;YAEzB,4BAA4B;YAC5B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;YAErF,OAAO,CAAC,GAAG,CAAC,iBAAiB,SAAS,EAAE,CAAC,CAAC;YAE1C,uBAAuB;YACvB,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC3C,IAAI,CAAC,GAAG,KAAK,GAAG,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,kBAAkB,CACjG,CAAC;YACF,IAAI,YAAY,EAAE;gBACd,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,kBAAkB,CAAC,CAAC;gBACrD,OAAO;aACV;YAED,MAAM,OAAO,GAAY;gBACrB,EAAE,EAAE,MAAM;gBACV,IAAI,EAAE,GAAG,IAAI,KAAK,UAAU,GAAG;gBAC/B,GAAG,EAAE,GAAG;gBACR,SAAS,EAAE,SAAS;gBACpB,MAAM,EAAE,UAAU;gBAClB,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,cAAc,EAAE;gBACrC,WAAW,EAAE,IAAI,CAAC,kBAAkB;aACvC,CAAC;YAEF,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,SAAS,OAAO,CAAC,MAAM,SAAS,SAAS,EAAE,CAAC,CAAC;YAE3E,OAAO;YACP,MAAM,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC;gBAC7B,QAAQ,EAAE,MAAM,CAAC,gBAAgB,CAAC,YAAY;gBAC9C,KAAK,EAAE,WAAW,IAAI,KAAK,OAAO,CAAC,MAAM,GAAG;gBAC5C,WAAW,EAAE,KAAK;aACrB,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;gBAClB,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;gBAElC,IAAI;oBACA,SAAS;oBACT,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;oBAExD,WAAW;oBACX,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;oBACzD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;wBACxB,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAClD,iBAAiB,EACjB,EAAE,KAAK,EAAE,IAAI,EAAE,EACf,MAAM,EACN,IAAI,CACP,CAAC;wBAEF,IAAI,OAAO,KAAK,MAAM,EAAE;4BACpB,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC;4BAChD,OAAO;yBACV;wBAED,2BAA2B;wBAC3B,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE;4BAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;4BAC5C,IAAI,IAAI,KAAK,MAAM,EAAE;gCACjB,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;6BACpE;yBACJ;qBACJ;oBAED,OAAO;oBACP,MAAM,wBAAG,CAAC,KAAK,CAAC;wBACZ,EAAE,EAAE,EAAE;wBACN,IAAI,EAAE,cAAI;wBACV,GAAG,EAAE,SAAS;wBACd,GAAG,EAAE,GAAG;wBACR,YAAY,EAAE,IAAI;wBAClB,KAAK,EAAE,CAAC;wBACR,GAAG,EAAE,UAAU;wBACf,UAAU,EAAE,CAAC,KAAU,EAAE,EAAE;4BACvB,IAAI,KAAK,CAAC,KAAK,EAAE;gCACb,MAAM,OAAO,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;gCACnD,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC;6BACzE;wBACL,CAAC;qBACJ,CAAC,CAAC;oBAEH,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;oBAE3B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBAC5B,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;oBACpC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;oBAEjC,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,eAAe,IAAI,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;oBAEhF,uBAAuB;oBACvB,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;wBACzB,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;wBAC/B,YAAY;wBACZ,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC;wBAC5B,MAAM,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;wBACvC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;qBAC9B;yBAAM;wBACH,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;qBAC1C;iBAEJ;gBAAC,OAAO,KAAK,EAAE;oBACZ,OAAO,CAAC,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;oBACtC,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,WAAW,KAAK,EAAE,CAAC,CAAC;iBACtD;YACL,CAAC,CAAC,CAAC;SAEN;QAAC,OAAO,KAAK,EAAE;YACZ,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;YAC7C,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,gBAAgB,KAAK,EAAE,CAAC,CAAC;SAC3D;IACL,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,WAAW,CAAC,MAAc;QACpC,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC;QAC5B,MAAM,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QACvC,IAAI,CAAC,aAAa,EAAE,CAAC;IACzB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,WAAW,CAAC,MAAc;QACpC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;QACtD,IAAI,CAAC,IAAI,EAAE;YACP,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC;YAChD,OAAO;SACV;QAED,MAAM,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC;YAC7B,QAAQ,EAAE,MAAM,CAAC,gBAAgB,CAAC,YAAY;YAC9C,KAAK,EAAE,WAAW,IAAI,CAAC,IAAI,EAAE;YAC7B,WAAW,EAAE,KAAK;SACrB,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;YAClB,IAAI;gBACA,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;gBAExD,SAAS;gBACT,MAAM,wBAAG,CAAC,IAAI,CAAC;oBACX,EAAE,EAAE,EAAE;oBACN,IAAI,EAAE,cAAI;oBACV,GAAG,EAAE,IAAI,CAAC,SAAS;oBACnB,MAAM,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,iBAAiB,EAAE;oBACvD,WAAW,EAAE,IAAI;iBACpB,CAAC,CAAC;gBAEH,WAAW;gBACX,IAAI,CAAC,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC,cAAc,EAAE,CAAC;gBAC5C,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;gBAEpC,UAAU;gBACV,MAAM,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;gBAEvC,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,eAAe,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;gBACjE,IAAI,CAAC,aAAa,EAAE,CAAC;aAExB;YAAC,OAAO,KAAK,EAAE;gBACZ,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,gBAAgB,KAAK,EAAE,CAAC,CAAC;aAC3D;QACL,CAAC,CAAC,CAAC;IACP,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,aAAa,CAAC,MAAc;QACtC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;QACtD,IAAI,CAAC,IAAI;YAAE,OAAO;QAElB,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAClD,iBAAiB,IAAI,CAAC,IAAI,eAAe,EACzC,EAAE,KAAK,EAAE,IAAI,EAAE,EACf,MAAM,EACN,IAAI,CACP,CAAC;QAEF,IAAI,OAAO,KAAK,MAAM,EAAE;YACpB,IAAI;gBACA,oBAAoB;gBACpB,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBAEvE,SAAS;gBACT,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;gBAC3D,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;gBAEpC,kBAAkB;gBAClB,IAAI,IAAI,CAAC,aAAa,KAAK,MAAM,EAAE;oBAC/B,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;oBACxB,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC;iBACjC;gBAED,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,cAAc,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;gBAChE,IAAI,CAAC,aAAa,EAAE,CAAC;aAExB;YAAC,OAAO,KAAK,EAAE;gBACZ,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,gBAAgB,KAAK,EAAE,CAAC,CAAC;aAC3D;SACJ;IACL,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,mBAAmB,CAAC,MAAc;QAC5C,oBAAoB;QACpB,IAAI,IAAI,CAAC,iBAAiB,EAAE;YACxB,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;YACvC,OAAO;SACV;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;QACtD,IAAI,CAAC,IAAI;YAAE,OAAO;QAElB,WAAW;QACX,IAAI;YACA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;gBAC3B,IAAI,EAAE,gBAAgB;gBACtB,OAAO,EAAE,IAAI;aAChB,CAAC,CAAC;SACN;QAAC,OAAO,KAAK,EAAE;YACZ,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;YAC1C,OAAO;SACV;QAED,IAAI;YACA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC1D,IAAI,CAAC,mBAAmB,GAAG,QAAQ,CAAC;YAEpC,WAAW;YACX,IAAI,CAAC,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC,cAAc,EAAE,CAAC;YAC5C,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;SAEvC;QAAC,OAAO,KAAK,EAAE;YACZ,OAAO,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;YACnC,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC;SACjC;QAED,kBAAkB;QAClB,IAAI,IAAI,CAAC,iBAAiB,EAAE;YACxB,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;YACtC,OAAO;SACV;QAED,WAAW;QACX,IAAI;YACA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;gBAC3B,IAAI,EAAE,gBAAgB;gBACtB,OAAO,EAAE,KAAK;aACjB,CAAC,CAAC;YAEH,IAAI,CAAC,aAAa,EAAE,CAAC;SACxB;QAAC,OAAO,KAAK,EAAE;YACZ,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;SAC7C;IACL,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,aAAa,CAAC,GAAW,EAAE,eAAuB,EAAE;QAC9D,IAAI;YACA,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC7C,MAAM,IAAI,GAAkB,EAAE,CAAC;YAE/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;gBACtB,+BAA+B;gBAC/B,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,KAAK,MAAM;oBAAE,SAAS;gBACtD,IAAI,IAAI,KAAK,iBAAiB;oBAAE,SAAS;gBAEzC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;gBACtC,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC/C,MAAM,mBAAmB,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;gBAE1D,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE;oBACrB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;oBACzE,IAAI,CAAC,IAAI,CAAC;wBACN,IAAI,EAAE,IAAI;wBACV,IAAI,EAAE,QAAQ;wBACd,IAAI,EAAE,mBAAmB;wBACzB,QAAQ,EAAE,QAAQ;qBACrB,CAAC,CAAC;iBACN;qBAAM;oBACH,IAAI,CAAC,IAAI,CAAC;wBACN,IAAI,EAAE,IAAI;wBACV,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,mBAAmB;qBAC5B,CAAC,CAAC;iBACN;aACJ;YAED,OAAO,IAAI,CAAC;SACf;QAAC,OAAO,KAAK,EAAE;YACZ,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;YACjC,OAAO,EAAE,CAAC;SACb;IACL,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,aAAa,CAAC,QAAgB;QACxC,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;YACjD,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;YACjD,OAAO;SACV;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,aAAa,CAAC,CAAC;QAClE,IAAI,CAAC,IAAI,EAAE;YACP,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;YAC/C,OAAO;SACV;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC9E,IAAI,CAAC,SAAS,EAAE;YACZ,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;YAC1C,OAAO;SACV;QAED,IAAI;YACA,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YACrD,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC7D,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YAEzC,QAAQ;YACR,MAAM,KAAK,GAAG,KAAK,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAChD,MAAM,SAAS,GAAW;gBACtB,EAAE,EAAE,KAAK;gBACT,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,QAAQ;gBAClB,OAAO,EAAE,OAAO;gBAChB,WAAW,EAAE,IAAI,CAAC,kBAAkB;aACvC,CAAC;YAEF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC7B,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAEpC,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,YAAY,SAAS,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC,CAAC;YAChF,IAAI,CAAC,aAAa,EAAE,CAAC;SAExB;QAAC,OAAO,KAAK,EAAE;YACZ,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,WAAW,KAAK,EAAE,CAAC,CAAC;SACtD;IACL,CAAC;IAED,qBAAqB;IAErB,mBAAmB;IACX,KAAK,CAAC,mBAAmB;QAC7B,IAAI;YACA,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC;gBAC9C,cAAc,EAAE,KAAK;gBACrB,gBAAgB,EAAE,IAAI;gBACtB,aAAa,EAAE,KAAK;gBACpB,SAAS,EAAE,SAAS;gBACpB,KAAK,EAAE,cAAc;aACxB,CAAC,CAAC;YAEH,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC7B,MAAM,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;gBACtC,MAAM,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;aAC5C;SACJ;QAAC,OAAO,KAAK,EAAE;YACZ,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,YAAY,KAAK,EAAE,CAAC,CAAC;SACvD;IACL,CAAC;IAED,kBAAkB;IAElB;;OAEG;IACK,KAAK,CAAC,sBAAsB;QACpC,IAAI;YACA,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;gBACxB,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;gBAChC,OAAO;aACV;YAED,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YACjE,IAAI,CAAC,WAAW,EAAE;gBACd,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;gBAClC,OAAO;aACV;YAED,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,iBAAiB,CAAC,CAAC;YAErF,gBAAgB;YAChB,MAAM,uBAAuB,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAClG,MAAM,kBAAkB,GAAG,uBAAuB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAClE,MAAM,wBAAwB,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;YACxG,MAAM,mBAAmB,GAAG,wBAAwB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACpE,MAAM,qBAAqB,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,mBAAmB,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;YAExG,6BAA6B;YAC7B,MAAM,sBAAsB,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CACvD,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CACjD,CAAC;YACF,MAAM,2BAA2B,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CACnE,mBAAmB,CAAC,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,CACnD,CAAC;YAEF,MAAM,IAAI,GAAgB;gBACtB,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,gBAAgB,CAAC;gBACnE,SAAS,EAAE,uBAAuB;gBAClC,UAAU,EAAE,wBAAwB;gBACpC,OAAO,EAAE,qBAAqB;gBAC9B,QAAQ,EAAE,sBAAsB;gBAChC,aAAa,EAAE,2BAA2B,CAAC,YAAY;aAC1D,CAAC;YAEF,MAAM,UAAU,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC3E,MAAM,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;YAEzD,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,sBAAsB,CAAC,MAAM,EAAE,WAAW,EAAE,2BAA2B,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;SAC3H;QAAC,OAAO,KAAK,EAAE;YACZ,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,aAAa,KAAK,EAAE,CAAC,CAAC;SACxD;IACL,CAAC;IAEG;;OAEG;IACK,KAAK,CAAC,eAAe,CAAC,WAAmB;QACjD,IAAI;YACA,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,iBAAiB,CAAC,CAAC;YAErF,aAAa;YACb,IAAI;gBACA,MAAM,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;aAC3C;YAAC,MAAM;gBACJ,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,qCAAqC,CAAC,CAAC;gBACtE,OAAO,KAAK,CAAC;aAChB;YAED,SAAS;YACT,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAC7D,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACnD,MAAM,IAAI,GAAgB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAE9C,SAAS;YACT,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;YACnB,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;YACpB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;YACrB,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;YAClB,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;YACnB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC,CAAC,YAAY;YAErC,YAAY;YACZ,IAAI,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;gBAC/C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;aACjC;YACD,IAAI,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;gBACjD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;aACnC;YACD,IAAI,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;gBACnD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;aACrC;YACD,IAAI,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;gBAC7C,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;aAC/B;YACD,IAAI,IAAI,CAAC,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;gBAC/C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;aACjC;YACD,IAAI,IAAI,CAAC,aAAa,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE;gBACzD,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,YAAY;aACxD;YAED,sBAAsB;YACtB,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC1B,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC5C,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAC;gBAC1D,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;aAClC;YAED,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,UAAU,WAAW,UAAU,IAAI,CAAC,QAAQ,CAAC,MAAM,cAAc,IAAI,CAAC,aAAa,CAAC,MAAM,SAAS,CAAC,CAAC;YAC1I,IAAI,CAAC,aAAa,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC;SACf;QAAC,OAAO,KAAK,EAAE;YACZ,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,aAAa,KAAK,EAAE,CAAC,CAAC;YACrD,OAAO,KAAK,CAAC;SAChB;IACL,CAAC;IAEG;;OAEG;IACK,KAAK,CAAC,uBAAuB,CAAC,WAAmB;QACrD,IAAI;YACA,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,iBAAiB,CAAC,CAAC;YACrF,MAAM,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACxC,OAAO,IAAI,CAAC;SACf;QAAC,MAAM;YACJ,OAAO,KAAK,CAAC;SAChB;IACL,CAAC;IAED,iBAAiB;IACT,KAAK,CAAC,iBAAiB,CAAC,SAAiB,EAAE,WAAmB;QAClE,IAAI;YACA,eAAe;YACf,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,aAAa,CAC5C;gBACI;oBACI,KAAK,EAAE,mBAAmB;oBAC1B,WAAW,EAAE,iBAAiB;oBAC9B,KAAK,EAAE,QAAQ;iBAClB;gBACD;oBACI,KAAK,EAAE,sBAAsB;oBAC7B,WAAW,EAAE,iBAAiB;oBAC9B,KAAK,EAAE,QAAQ;iBAClB;aACJ,EACD;gBACI,WAAW,EAAE,UAAU;aAC1B,CACJ,CAAC;YAEF,IAAI,CAAC,MAAM,EAAE;gBACT,OAAO,IAAI,CAAC;aACf;YAED,IAAI,MAAM,CAAC,KAAK,KAAK,QAAQ,EAAE;gBAC3B,SAAS;gBACT,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC;oBAC9C,cAAc,EAAE,KAAK;oBACrB,gBAAgB,EAAE,IAAI;oBACtB,aAAa,EAAE,KAAK;oBACpB,SAAS,EAAE,MAAM,WAAW,QAAQ;oBACpC,KAAK,EAAE,QAAQ,WAAW,WAAW;iBACxC,CAAC,CAAC;gBAEH,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;oBAC7B,MAAM,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;oBAEtC,YAAY;oBACZ,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAAC,YAAY,CAAC,CAAC;oBACzE,IAAI,eAAe,EAAE;wBACjB,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,kBAAkB,CACrD,OAAO,YAAY,mBAAmB,EACtC,EAAE,KAAK,EAAE,IAAI,EAAE,EACf,UAAU,EACV,SAAS,CACZ,CAAC;wBAEF,IAAI,UAAU,KAAK,UAAU,EAAE;4BAC3B,SAAS;4BACT,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;4BACzD,IAAI,OAAO,EAAE;gCACT,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;gCAC/C,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;gCAC/B,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;gCAClC,IAAI,CAAC,aAAa,EAAE,CAAC;gCACrB,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,UAAU,YAAY,KAAK,CAAC,CAAC;gCAClE,OAAO,YAAY,CAAC;6BACvB;yBACJ;wBACD,uBAAuB;qBAC1B;oBAED,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;oBAC/C,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,cAAc,YAAY,EAAE,CAAC,CAAC;oBAEnE,SAAS;oBACT,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;oBAEpC,OAAO,YAAY,CAAC;iBACvB;aACJ;iBAAM;gBACH,QAAQ;gBACR,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC;oBAC/C,MAAM,EAAE,iBAAiB;oBACzB,WAAW,EAAE,yBAAyB,WAAW,EAAE;oBACnD,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE;wBACrB,IAAI,CAAC,KAAK,EAAE;4BACR,OAAO,QAAQ,CAAC;yBACnB;wBACD,OAAO,IAAI,CAAC;oBAChB,CAAC;iBACJ,CAAC,CAAC;gBAEH,IAAI,SAAS,EAAE;oBACX,IAAI;wBACA,SAAS;wBACT,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;wBAC1C,MAAM,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;wBAElD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;wBAC5C,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,cAAc,SAAS,EAAE,CAAC,CAAC;wBAEhE,SAAS;wBACT,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;wBAEpC,OAAO,SAAS,CAAC;qBACpB;oBAAC,OAAO,KAAK,EAAE;wBACZ,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,WAAW,KAAK,EAAE,CAAC,CAAC;wBACnD,OAAO,IAAI,CAAC;qBACf;iBACJ;aACJ;YAED,OAAO,IAAI,CAAC;SACf;QAAC,OAAO,KAAK,EAAE;YACZ,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,cAAc,KAAK,EAAE,CAAC,CAAC;YACtD,OAAO,IAAI,CAAC;SACf;IACL,CAAC;IAED,QAAQ;IACA,KAAK,CAAC,iBAAiB,CAAC,SAAiB,EAAE,OAAe;QAC9D,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC;QAC5D,IAAI,OAAO,EAAE;YACT,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC;YACvB,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,WAAW,OAAO,EAAE,CAAC,CAAC;YAC3D,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;YACpC,IAAI,CAAC,aAAa,EAAE,CAAC;SACxB;IACL,CAAC;IAED,QAAQ;IACA,KAAK,CAAC,aAAa,CAAC,IAAY;QACpC,MAAM,KAAK,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC/C,MAAM,UAAU,GAAY;YACxB,EAAE,EAAE,KAAK;YACT,IAAI,EAAE,IAAI;SACb,CAAC;QACF,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAE/B,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;QACtD,IAAI,CAAC,aAAa,EAAE,CAAC;IACzB,CAAC;IAED,OAAO;IACC,KAAK,CAAC,aAAa,CAAC,SAAiB;QACzC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC;QAC5D,IAAI,CAAC,OAAO;YAAE,OAAO;QAErB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,CAAC;QAC9D,WAAW;QACX,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;QAC/E,MAAM,WAAW,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACpD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;QACvE,UAAU;QACV,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;QACnF,UAAU;QACV,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACpG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;QACnF,eAAe;QACf,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;QACvF,WAAW;QACX,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAEpC,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,SAAS,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAC9D,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;QACpC,IAAI,CAAC,aAAa,EAAE,CAAC;IACzB,CAAC;IAED,SAAS;IACD,KAAK,CAAC,kBAAkB,CAAC,UAAkB,EAAE,OAAe;QAChE,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,UAAU,CAAC,CAAC;QAC/D,IAAI,QAAQ,EAAE;YACV,QAAQ,CAAC,IAAI,GAAG,OAAO,CAAC;YACxB,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,YAAY,OAAO,EAAE,CAAC,CAAC;YAC5D,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;YACpC,IAAI,CAAC,aAAa,EAAE,CAAC;SACxB;IACL,CAAC;IAED,SAAS;IACD,KAAK,CAAC,cAAc,CAAC,IAAY;QACrC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;YACxB,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;YAClD,OAAO;SACV;QAED,MAAM,KAAK,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAChD,MAAM,WAAW,GAAa;YAC1B,EAAE,EAAE,KAAK;YACT,IAAI,EAAE,IAAI;YACV,SAAS,EAAE,IAAI,CAAC,gBAAgB;SACnC,CAAC;QACF,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAEjC,UAAU;QACV,MAAM,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,CAAC;QAEhD,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;QACvD,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;QACpC,IAAI,CAAC,aAAa,EAAE,CAAC;IACzB,CAAC;IAED,QAAQ;IACA,KAAK,CAAC,cAAc,CAAC,UAAkB;QAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,UAAU,CAAC,CAAC;QAC/D,IAAI,CAAC,QAAQ;YAAE,OAAO;QAEtB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,UAAU,CAAC,CAAC;QACjE,UAAU;QACV,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,UAAU,CAAC,CAAC;QAC3E,UAAU;QACV,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC7F,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;QACnF,eAAe;QACf,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;QAEvF,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,UAAU,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;QAChE,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;QACpC,IAAI,CAAC,aAAa,EAAE,CAAC;IACzB,CAAC;IAED,QAAQ;IACA,KAAK,CAAC,mBAAmB,CAAC,WAAmB,EAAE,OAAe;QAClE,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,WAAW,CAAC,CAAC;QAClE,IAAI,SAAS,EAAE;YACX,SAAS,CAAC,IAAI,GAAG,OAAO,CAAC;YACzB,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,WAAW,OAAO,EAAE,CAAC,CAAC;YAC3D,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;YACpC,IAAI,CAAC,aAAa,EAAE,CAAC;SACxB;IACL,CAAC;IAED,QAAQ;IACA,KAAK,CAAC,eAAe,CAAC,IAAY;QACtC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;YACzB,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;YAClD,OAAO;SACV;QAED,MAAM,KAAK,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAEjD,MAAM,YAAY,GAAc;YAC5B,EAAE,EAAE,KAAK;YACT,IAAI,EAAE,IAAI;YACV,UAAU,EAAE,IAAI,CAAC,iBAAiB;SACrC,CAAC;QACF,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAEnC,SAAS;QACT,MAAM,IAAI,CAAC,wBAAwB,CAAC,YAAY,CAAC,CAAC;QAElD,aAAa;QACb,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;QAExC,UAAU;QACV,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;YACd,EAAE,EAAE,KAAK,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC;YAC7B,IAAI,EAAE,KAAK;YACX,QAAQ,EAAE,YAAY;YACtB,OAAO,EAAE,KAAK,IAAI,oOAAoO;YACtP,WAAW,EAAE,KAAK;SACrB,CAAC,CAAC;QAEH,UAAU;QACV,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;YACd,EAAE,EAAE,KAAK,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC;YAC7B,IAAI,EAAE,KAAK;YACX,QAAQ,EAAE,oBAAoB;YAC9B,OAAO,EAAE,KAAK,IAAI,wDAAwD,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,wCAAwC,IAAI,uJAAuJ;YACrT,WAAW,EAAE,KAAK;SACrB,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,SAAS,IAAI,eAAe,CAAC,CAAC;QACnE,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;QACpC,IAAI,CAAC,aAAa,EAAE,CAAC;IACzB,CAAC;IAED,OAAO;IACC,KAAK,CAAC,eAAe,CAAC,WAAmB;QAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,WAAW,CAAC,CAAC;QAClE,IAAI,CAAC,SAAS;YAAE,OAAO;QAEvB,OAAO;QACP,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,WAAW,CAAC,CAAC;QAEpE,UAAU;QACV,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,WAAW,KAAK,WAAW,CAAC,CAAC;QAE3E,eAAe;QACf,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,KAAK,WAAW,CAAC,CAAC;QAE/E,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,SAAS,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;QAChE,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;QACpC,IAAI,CAAC,aAAa,EAAE,CAAC;IACzB,CAAC;IAED,QAAQ;IACA,KAAK,CAAC,gBAAgB,CAAC,QAAgB,EAAE,OAAe;QAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC;QACzD,IAAI,MAAM,EAAE;YACR,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC;YACtB,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,WAAW,OAAO,EAAE,CAAC,CAAC;YAC3D,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;YACpC,IAAI,CAAC,aAAa,EAAE,CAAC;SACxB;IACL,CAAC;IAED,UAAU;IACF,KAAK,CAAC,YAAY,CAAC,IAAY;QACnC,MAAM,KAAK,GAAG,KAAK,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAChD,MAAM,SAAS,GAAW;YACtB,EAAE,EAAE,KAAK;YACT,IAAI,EAAE,IAAI;YACV,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;YACjD,OAAO,EAAE,KAAK,IAAI,kBAAkB,IAAI,IAAI,EAAE,CAAC,cAAc,EAAE,qBAAqB;YACpF,WAAW,EAAE,IAAI,CAAC,kBAAkB;SACvC,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAE7B,WAAW;QACX,MAAM,IAAI,CAAC,8BAA8B,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAEnE,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;QACtD,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;QACpC,IAAI,CAAC,aAAa,EAAE,CAAC;IACzB,CAAC;IAED,yBAAyB;IACjB,KAAK,CAAC,YAAY,CAAC,QAAgB;QACvC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC;QACzD,IAAI,CAAC,MAAM;YAAE,OAAO;QAEpB,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAClD,cAAc,MAAM,CAAC,IAAI,mBAAmB,EAC5C,EAAE,KAAK,EAAE,IAAI,EAAE,EACf,MAAM,EACN,IAAI,CACP,CAAC;QAEF,IAAI,OAAO,KAAK,MAAM,EAAE;YACpB,OAAO;SACV;QAED,IAAI;YACA,WAAW;YACX,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC;YAE3D,aAAa;YACb,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,WAAW,CAAC,CAAC;YACzE,IAAI,SAAS,EAAE;gBACX,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,UAAU,CAAC,CAAC;gBACzE,IAAI,QAAQ,EAAE;oBACV,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;oBAC9D,IAAI,WAAW,EAAE;wBACb,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;wBAExF,mBAAmB;wBACnB,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;4BACzB,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;4BACnC,OAAO,CAAC,GAAG,CAAC,cAAc,QAAQ,EAAE,CAAC,CAAC;yBACzC;qBACJ;iBACJ;aACJ;YAED,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,SAAS,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YAC7D,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;YACpC,IAAI,CAAC,aAAa,EAAE,CAAC;SAExB;QAAC,OAAO,KAAK,EAAE;YACZ,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,aAAa,KAAK,EAAE,CAAC,CAAC;SACxD;IACL,CAAC;IAED,mBAAmB;IAEX,KAAK,CAAC,aAAa,CAAC,GAAW;QACvC,IAAI;YACA,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,GAAG,CAAC,CAAC;YAEjC,MAAM,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC;gBAC7B,QAAQ,EAAE,MAAM,CAAC,gBAAgB,CAAC,YAAY;gBAC9C,KAAK,EAAE,UAAU;gBACjB,WAAW,EAAE,KAAK;aACrB,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;gBAClB,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;gBAExD,IAAI;oBACA,qCAAqC;oBACrC,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;oBAEzD,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;oBAE9C,MAAM,IAAI,GAAG,MAAM,wBAAG,CAAC,cAAc,CAAC;wBAClC,IAAI,EAAE,cAAI;wBACV,GAAG,EAAE,GAAG;qBACX,CAAC,CAAC;oBAEH,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;oBAEhC,+CAA+C;oBAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CACjC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,sBAAsB,CAAC,CAClF,CAAC;oBAEF,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;oBAExC,oBAAoB;oBACpB,MAAM,QAAQ,GAAgB,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;wBAC/C,IAAI,UAAkB,CAAC;wBAEvB,IAAI,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE;4BACrC,kCAAkC;4BAClC,UAAU,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAAC;yBAC5D;6BAAM;4BACH,yBAAyB;4BACzB,UAAU,GAAG,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;yBACnD;wBAED,OAAO;4BACH,IAAI,EAAE,UAAU;4BAChB,SAAS,EAAE,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,QAAQ;4BAC3D,QAAQ,EAAE,KAAK,CAAC,YAAY;yBAC/B,CAAC;oBACN,CAAC,CAAC,CAAC;oBAEH,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;oBAEpC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;wBACvB,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC;qBAC9B;oBAED,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;oBAEzD,sBAAsB;oBACtB,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;oBAClD,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;oBAExC,4BAA4B;oBAC5B,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;wBACzB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC;4BAC3B,IAAI,EAAE,iBAAiB;4BACvB,QAAQ,EAAE,QAAQ;4BAClB,UAAU,EAAE,UAAU;4BACtB,OAAO,EAAE,GAAG;yBACf,CAAC,CAAC;qBACN;oBAED,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;iBAEtD;gBAAC,OAAO,KAAK,EAAE;oBACZ,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;oBAEpD,2BAA2B;oBAC3B,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,WAAW,KAAK,EAAE,CAAC,CAAC;iBACtD;YACL,CAAC,CAAC,CAAC;SAEN;QAAC,OAAO,KAAK,EAAE;YACZ,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;YAClC,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,WAAW,KAAK,EAAE,CAAC,CAAC;SACtD;IACL,CAAC;IAED;;OAEG;IACK,eAAe,CAAC,QAAqB;QACzC,MAAM,IAAI,GAAU,EAAE,CAAC;QAEvB,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YACtB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACrC,IAAI,YAAY,GAAG,IAAI,CAAC;YAExB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACnC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACtB,MAAM,MAAM,GAAG,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;gBACtC,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAEjD,IAAI,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;gBAE1D,IAAI,CAAC,IAAI,EAAE;oBACP,IAAI,GAAG;wBACH,IAAI,EAAE,IAAI;wBACV,QAAQ,EAAE,QAAQ;wBAClB,MAAM,EAAE,MAAM;wBACd,QAAQ,EAAE,EAAE;wBACZ,KAAK,EAAE,CAAC;wBACR,QAAQ,EAAE,IAAI,CAAC,OAAO;qBACzB,CAAC;oBACF,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBAC3B;gBAED,IAAI,MAAM,EAAE;oBACR,aAAa;oBACb,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;iBACxB;gBAED,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC;aAChC;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC;IAChB,CAAC;IAEW,KAAK,CAAC,aAAa,CAAC,GAAW,EAAE,QAAkB;QACvD,IAAI;YACA,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;YAE7C,QAAQ;YACR,MAAM,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC;gBAC7B,QAAQ,EAAE,MAAM,CAAC,gBAAgB,CAAC,YAAY;gBAC9C,KAAK,EAAE,QAAQ,QAAQ,CAAC,MAAM,MAAM;gBACpC,WAAW,EAAE,KAAK;aACrB,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;gBAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACtC,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;oBAC3B,MAAM,eAAe,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC;oBACpD,QAAQ,CAAC,MAAM,CAAC;wBACZ,SAAS,EAAE,eAAe;wBAC1B,OAAO,EAAE,SAAS,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,MAAM,GAAG;qBAC3D,CAAC,CAAC;oBAEH,OAAO,CAAC,GAAG,CAAC,YAAY,MAAM,EAAE,CAAC,CAAC;oBAClC,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC;iBAC1E;YACL,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,QAAQ,QAAQ,CAAC,MAAM,MAAM,CAAC,CAAC;SAEvE;QAAC,OAAO,KAAK,EAAE;YACZ,OAAO,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;YAClC,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,WAAW,KAAK,EAAE,CAAC,CAAC;SACtD;IACL,CAAC;IAEO,gBAAgB,CAAC,GAAW,EAAE,MAAc;QAChD,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,cAAc,CAAC;QAC7E,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;QAC9D,OAAO,GAAG,QAAQ,IAAI,cAAc,EAAE,CAAC;IAC3C,CAAC;IAED,OAAO;IACC,aAAa;QACjB,oBAAoB;QACpB,IAAI,IAAI,CAAC,iBAAiB,EAAE;YACxB,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;YACpC,OAAO;SACV;QAED,IAAI;YACA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;SACtD;QAAC,OAAO,KAAK,EAAE;YACZ,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;SAC1C;IACL,CAAC;IAEO,iBAAiB;QACzB,QAAQ,IAAI,CAAC,WAAW,EAAE;YACtB,KAAK,UAAU;gBACX,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;oBAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,YAAY,EAAE,IAAI,CAAC,YAAY;iBAClC,CAAC,CAAC;YACP,KAAK,WAAW;gBACZ,MAAM,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,gBAAgB,CAAC,CAAC;gBAC3F,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;oBAC5B,SAAS,EAAE,gBAAgB;iBAC9B,CAAC,CAAC;YACP,KAAK,YAAY;gBACb,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,gBAAgB,CAAC,CAAC;gBAC/E,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,iBAAiB,CAAC,CAAC;gBAClF,MAAM,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,IAAI,CAAC,iBAAiB,CAAC,CAAC;gBAE/F,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;oBAC7B,OAAO,EAAE,cAAc;oBACvB,QAAQ,EAAE,eAAe;oBACzB,UAAU,EAAE,iBAAiB;iBAChC,CAAC,CAAC;YACP,KAAK,SAAS;gBACV,MAAM,gBAAgB,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,kBAAkB,CAAC,CAAC;gBACrF,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,WAAW,KAAK,IAAI,CAAC,kBAAkB,CAAC,CAAC;gBACjG,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,aAAa,CAAC,CAAC;gBAEzE,uBAAuB;gBACvB,MAAM,iBAAiB,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,kBAAkB,CAAC,CAAC;gBACrG,MAAM,sBAAsB,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,WAAW,KAAK,IAAI,CAAC,kBAAkB,CAAC,CAAC;gBAEnH,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;oBAC1B,SAAS,EAAE,gBAAgB;oBAC3B,OAAO,EAAE,gBAAgB;oBACzB,QAAQ,EAAE,iBAAiB;oBAC3B,cAAc,EAAE,WAAW;oBAC3B,WAAW,EAAE,IAAI,CAAC,mBAAmB;oBACrC,UAAU,EAAE,KAAK;oBACjB,aAAa,EAAE,sBAAsB,CAAC,YAAY;iBACrD,CAAC,CAAC;YACP;gBACI,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;oBAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,YAAY,EAAE,IAAI,CAAC,YAAY;iBAClC,CAAC,CAAC;SACV;IACL,CAAC;IAEW,KAAK,CAAC,mBAAmB,CAAC,MAAc;QAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;QACtD,IAAI,CAAC,IAAI,EAAE;YACP,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC;YAChD,OAAO;SACV;QAED,IAAI;YACA,aAAa;YACb,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;gBAChC,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,CAAC;gBACpD,OAAO;aACV;YAED,8BAA8B;YAC9B,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC;gBAC/C,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;gBAC3C,cAAc,EAAE,IAAI;gBACpB,gBAAgB,EAAE,KAAK;gBACvB,aAAa,EAAE,KAAK;gBACpB,SAAS,EAAE,UAAU;gBACrB,KAAK,EAAE,KAAK,IAAI,CAAC,IAAI,QAAQ;aAChC,CAAC,CAAC;YAEH,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC/B,UAAU;gBACV,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;gBACrE,MAAM,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;gBAC/C,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,UAAU,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;aACtF;SAEJ;QAAC,OAAO,KAAK,EAAE;YACZ,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,kBAAkB,KAAK,EAAE,CAAC,CAAC;SAC7D;IACL,CAAC;IAEO,KAAK,CAAC,sBAAsB,CAAC,QAAgB;QACjD,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC;QACzD,IAAI,CAAC,MAAM,EAAE;YACT,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;YAC1C,OAAO;SACV;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,WAAW,CAAC,CAAC;QACzE,IAAI,CAAC,SAAS,EAAE;YACZ,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;YACxC,OAAO;SACV;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,UAAU,CAAC,CAAC;QACzE,IAAI,CAAC,QAAQ,EAAE;YACX,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YACzC,OAAO;SACV;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC9D,IAAI,CAAC,WAAW,EAAE;YACd,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;YAC5C,OAAO;SACV;QAED,SAAS;QACT,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QAExF,IAAI;YACA,WAAW;YACX,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;gBAC1B,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,gBAAgB,CAAC,CAAC;gBACnD,SAAS;gBACT,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBACvC,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBACtD,OAAO;gBACP,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;aAC/D;YAED,iBAAiB;YACjB,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YACnE,MAAM,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;SAElD;QAAC,OAAO,KAAK,EAAE;YACZ,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,aAAa,KAAK,EAAE,CAAC,CAAC;SACxD;IACL,CAAC;IAEG,KAAK,CAAC,YAAY,CAAC,SAAmB,EAAE,WAAmB,EAAE,UAAkB;QACnF,IAAI;YACA,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;gBAC1B,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;gBAC1C,OAAO;aACV;YAED,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;gBACtB,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,CAAC;gBAClD,OAAO;aACV;YAED,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,kBAAkB,CAAC,CAAC;YAC9E,IAAI,CAAC,SAAS,EAAE;gBACZ,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;gBACxC,OAAO;aACV;YAED,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,UAAU,CAAC,CAAC;YACzE,IAAI,CAAC,QAAQ,EAAE;gBACX,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;gBACzC,OAAO;aACV;YAED,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAC9D,IAAI,CAAC,WAAW,EAAE;gBACd,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;gBAC5C,OAAO;aACV;YAED,YAAY;YACZ,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YACrF,IAAI,eAAe,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM,EAAE;gBAC7C,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;gBAC5C,OAAO;aACV;YAED,UAAU;YACV,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;YAC1F,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,eAAe,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAE9D,oBAAoB;YACpB,MAAM,WAAW,GAAa,EAAE,CAAC;YACjC,KAAK,MAAM,MAAM,IAAI,eAAe,EAAE;gBAClC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAC1F,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAE/D,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;oBAC3B,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;oBACnD,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;oBAClC,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;iBAChD;qBAAM;oBACH,iBAAiB;oBACjB,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;oBAC9D,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;oBAClC,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;iBAChD;aACJ;YAED,YAAY;YACZ,MAAM,SAAS,GAAiB;gBAC5B,EAAE,EAAE,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE;gBAC1B,WAAW,EAAE,WAAW;gBACxB,UAAU,EAAE,UAAU;gBACtB,IAAI,EAAE,eAAe;gBACrB,SAAS,EAAE,WAAW,CAAC,MAAM;gBAC7B,WAAW,EAAE,IAAI,CAAC,kBAAkB;gBACpC,iBAAiB,EAAE,SAAS;gBAC5B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,cAAc,EAAE;aACzC,CAAC;YAEF,aAAa;YACb,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAEnC,WAAW;YACX,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;gBAC9B,MAAM,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;aAC7C;YAED,OAAO;YACP,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAEpC,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,QAAQ,eAAe,CAAC,MAAM,eAAe,UAAU,EAAE,CAAC,CAAC;YAEhG,iBAAiB;YACjB,IAAI,CAAC,aAAa,EAAE,CAAC;SAExB;QAAC,OAAO,KAAK,EAAE;YACZ,OAAO,CAAC,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;YACpC,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,aAAa,KAAK,EAAE,CAAC,CAAC;SACxD;IACL,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,oBAAoB,CAAC,QAAgB;QAC/C,IAAI;YACA,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC;YACzD,IAAI,CAAC,MAAM;gBAAE,OAAO;YAEpB,WAAW;YACX,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC;YAE3D,aAAa;YACb,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,WAAW,CAAC,CAAC;YACzE,IAAI,SAAS,EAAE;gBACX,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,SAAS,CAAC,UAAU,CAAC,CAAC;gBACzE,IAAI,QAAQ,EAAE;oBACV,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;oBAC9D,IAAI,WAAW,EAAE;wBACb,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;wBAExF,mBAAmB;wBACnB,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;4BACzB,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;4BACnC,OAAO,CAAC,GAAG,CAAC,cAAc,QAAQ,EAAE,CAAC,CAAC;yBACzC;qBACJ;iBACJ;aACJ;YAED,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;SAE3C;QAAC,OAAO,KAAK,EAAE;YACZ,OAAO,CAAC,KAAK,CAAC,aAAa,KAAK,EAAE,CAAC,CAAC;SACvC;IACL,CAAC;IACD;;OAEG;IACK,KAAK,CAAC,kBAAkB,CAAC,QAAgB;QAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC;QAC/D,IAAI,CAAC,MAAM;YAAE,OAAO;QAEpB,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAClD,eAAe,MAAM,CAAC,WAAW,oBAAoB,EACrD,EAAE,KAAK,EAAE,IAAI,EAAE,EACf,MAAM,EACN,IAAI,CACP,CAAC;QAEF,IAAI,OAAO,KAAK,MAAM,EAAE;YACpB,IAAI;gBACA,cAAc;gBACd,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBAEpE,SAAS;gBACT,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC;gBACvE,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAC;gBAEpC,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,aAAa,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;gBACxE,IAAI,CAAC,aAAa,EAAE,CAAC;aAExB;YAAC,OAAO,KAAK,EAAE;gBACZ,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,cAAc,KAAK,EAAE,CAAC,CAAC;aACzD;SACJ;IACL,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,wBAAwB,CAAC,QAAgB;QACnD,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC;QAC/D,IAAI,CAAC,MAAM,EAAE;YACT,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;YAC9C,OAAO;SACV;QAED,IAAI;YACA,YAAY;YACZ,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;gBAC7B,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;gBAC3C,OAAO;aACV;YAED,kBAAkB;YAClB,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC/C,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,mBAAmB,EAAE,SAAS,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,CAAC;SAE7F;QAAC,OAAO,KAAK,EAAE;YACZ,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,cAAc,KAAK,EAAE,CAAC,CAAC;SACzD;IACL,CAAC;IAEG;;;;OAIG;IACK,KAAK,CAAC,mBAAmB,CAAC,IAAsB,EAAE,EAAU;QAChE,IAAI,UAA8B,CAAC;QACnC,IAAI,UAA8B,CAAC;QAEnC,IAAI,IAAI,KAAK,KAAK,EAAE;YAChB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;YAClD,IAAI,CAAC,IAAI,EAAE;gBACP,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,eAAe,CAAC,CAAC;gBAChD,OAAO;aACV;YACD,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC;YAC5B,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC;SAC1B;aAAM,IAAI,IAAI,KAAK,QAAQ,EAAE;YAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;YACzD,IAAI,CAAC,MAAM,EAAE;gBACT,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;gBAC9C,OAAO;aACV;YACD,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC;YACzB,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC;SACnC;QAED,IAAI,CAAC,UAAU,EAAE;YACb,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;YAC3C,OAAO;SACV;QAED,IAAI;YACA,YAAY;YACZ,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;gBAC5B,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,GAAG,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC;gBAC9E,OAAO;aACV;YAED,8BAA8B;YAC9B,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC;gBAC/C,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC;gBACvC,cAAc,EAAE,IAAI;gBACpB,gBAAgB,EAAE,KAAK;gBACvB,aAAa,EAAE,KAAK;gBACpB,SAAS,EAAE,UAAU;gBACrB,KAAK,EAAE,KAAK,UAAU,QAAQ;aACjC,CAAC,CAAC;YAEH,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC/B,UAAU;gBACV,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;gBACrE,MAAM,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;gBAC/C,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,UAAU,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;aACtF;SAEJ;QAAC,OAAO,KAAK,EAAE;YACZ,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,KAAK,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,SAAS,KAAK,EAAE,CAAC,CAAC;SAC5F;IACL,CAAC;CACJ;AA3xDD,kCA2xDC"} \ No newline at end of file +{"version":3,"file":"ConfigPanel.js","sourceRoot":"","sources":["../../src/panels/ConfigPanel.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out/panels/types/DataTypes.js b/out/panels/types/DataTypes.js new file mode 100644 index 0000000..01df013 --- /dev/null +++ b/out/panels/types/DataTypes.js @@ -0,0 +1,4 @@ +"use strict"; +// src/types/DataTypes.ts +Object.defineProperty(exports, "__esModule", { value: true }); +//# sourceMappingURL=DataTypes.js.map \ No newline at end of file diff --git a/out/panels/types/DataTypes.js.map b/out/panels/types/DataTypes.js.map new file mode 100644 index 0000000..cc7a8b5 --- /dev/null +++ b/out/panels/types/DataTypes.js.map @@ -0,0 +1 @@ +{"version":3,"file":"DataTypes.js","sourceRoot":"","sources":["../../../src/panels/types/DataTypes.ts"],"names":[],"mappings":";AAAA,yBAAyB"} \ No newline at end of file diff --git a/out/panels/views/ConfigView.js b/out/panels/views/ConfigView.js index 5f9e3d2..1310a06 100644 --- a/out/panels/views/ConfigView.js +++ b/out/panels/views/ConfigView.js @@ -6,14 +6,13 @@ class ConfigView extends BaseView_1.BaseView { render(data) { const container = data?.container; const configs = data?.configs || []; - const gitRepos = data?.gitRepos || []; - const currentGitRepo = data?.currentGitRepo; - const gitFileTree = data?.gitFileTree || []; - const gitLoading = data?.gitLoading || false; + const moduleFolders = data?.moduleFolders || []; + const currentModuleFolder = data?.currentModuleFolder; + const moduleFolderFileTree = data?.moduleFolderFileTree || []; + const moduleFolderLoading = data?.moduleFolderLoading || false; const gitBranches = data?.gitBranches || []; const gitRepoUrl = data?.gitRepoUrl || ''; - const mergedFolders = data?.mergedFolders || []; - // 生成配置列表的 HTML - 包含配置文件和 Git 仓库 + // 生成配置列表的 HTML - 包含配置文件和模块文件夹 const configsHtml = configs.map((config) => ` @@ -28,39 +27,22 @@ class ConfigView extends BaseView_1.BaseView { `).join(''); - // 生成合并文件夹的 HTML - 显示在配置列表中 - const mergedFoldersHtml = mergedFolders.map((folder) => ` - - - 📁 ${folder.displayName} - - - ${folder.folderName} - - - - - - `).join(''); - // 生成 Git 仓库列表的 HTML - 修改显示方式,Git 仓库不可勾选 - const gitReposHtml = gitRepos.map(repo => { - // 提取仓库名称(从URL中获取或使用name) - const repoName = repo.name.split(' (')[0]; // 移除分支名部分 - // 提取分支名 - const branchMatch = repo.name.match(/\(([^)]+)\)/); - const branchName = branchMatch ? branchMatch[1] : repo.branch; + // 生成模块文件夹的 HTML - 统一显示 Git 和合并文件夹 + const moduleFoldersHtml = moduleFolders.map((folder) => { + const icon = folder.type === 'git' ? '📁' : '📁'; return ` - 📁 ${repoName} -
-
+ ${icon} ${folder.name} - ${branchName} + ${folder.localPath.split('/').pop()} - + ${folder.type === 'git' ? ` + + ` : ''} + `; @@ -110,6 +92,19 @@ class ConfigView extends BaseView_1.BaseView { opacity: 0.8; } + .btn-sync { + background: var(--vscode-button-background); + color: var(--vscode-button-foreground); + padding: 4px 8px; + border: none; + border-radius: 2px; + cursor: pointer; + } + + .btn-sync:hover { + background: var(--vscode-button-hoverBackground); + } + /* 树状分支样式 */ .branch-tree { font-family: 'Courier New', monospace; @@ -251,21 +246,20 @@ class ConfigView extends BaseView_1.BaseView { 配置 - 文件 + 文件/文件夹 操作 ${configsHtml} - ${mergedFoldersHtml} - ${gitReposHtml} + ${moduleFoldersHtml} - +
-

📚 Git 仓库管理

+

📚 模块云仓库

@@ -319,8 +313,7 @@ class ConfigView extends BaseView_1.BaseView { }); } - - // 统一功能:打开模块文件夹(合并 Git 仓库和合并文件夹功能) + // 统一功能:打开模块文件夹 function openTheModuleFolder(id, type) { console.log('📂 打开模块文件夹:', { id, type }); vscode.postMessage({ @@ -364,46 +357,34 @@ class ConfigView extends BaseView_1.BaseView { ); } - // 删除合并文件夹功能 - function deleteMergedFolder(folderId) { - console.log('🗑️ 尝试删除合并文件夹:', folderId); + // 删除模块文件夹功能 + function deleteModuleFolder(folderId) { + console.log('🗑️ 尝试删除模块文件夹:', folderId); showConfirmDialog( - '确认删除合并文件夹', - '确定删除这个合并文件夹吗?这将删除文件夹及其所有内容。', + '确认删除模块文件夹', + '确定删除这个模块文件夹吗?这将删除文件夹及其所有内容。', function() { - console.log('✅ 用户确认删除合并文件夹:', folderId); + console.log('✅ 用户确认删除模块文件夹:', folderId); vscode.postMessage({ - type: 'deleteMergedFolder', + type: 'deleteModuleFolder', folderId: folderId }); }, function() { // 用户取消删除 - console.log('❌ 用户取消删除合并文件夹'); + console.log('❌ 用户取消删除模块文件夹'); } ); } - // Git 仓库删除功能 - function deleteGitRepo(repoId) { - console.log('🗑️ 尝试删除 Git 仓库:', repoId); - - showConfirmDialog( - '确认删除 Git 仓库', - '确定删除这个 Git 仓库吗?这将删除本地克隆的代码文件夹。', - function() { - console.log('✅ 用户确认删除 Git 仓库:', repoId); - vscode.postMessage({ - type: 'deleteGitRepo', - repoId: repoId - }); - }, - function() { - // 用户取消删除 - console.log('❌ 用户取消删除 Git 仓库'); - } - ); + // 同步 Git 模块文件夹 + function syncModuleFolder(folderId) { + console.log('🔄 同步模块文件夹:', folderId); + vscode.postMessage({ + type: 'syncGitModuleFolder', + folderId: folderId + }); } function goBackToContainers() { @@ -480,14 +461,6 @@ class ConfigView extends BaseView_1.BaseView { }); } - function syncGitRepo(repoId) { - console.log('🔄 同步仓库:', repoId); - vscode.postMessage({ - type: 'syncGitRepo', - repoId: repoId - }); - } - // 配置文件合并功能 function toggleConfigSelection(configId) { const checkbox = document.querySelector('.config-checkbox[data-id="' + configId + '"]'); diff --git a/out/panels/views/ConfigView.js.map b/out/panels/views/ConfigView.js.map index 1cb1c73..c5b5679 100644 --- a/out/panels/views/ConfigView.js.map +++ b/out/panels/views/ConfigView.js.map @@ -1 +1 @@ -{"version":3,"file":"ConfigView.js","sourceRoot":"","sources":["../../../src/panels/views/ConfigView.ts"],"names":[],"mappings":";;;AAAA,yCAAsC;AA8DtC,MAAa,UAAW,SAAQ,mBAAQ;IACpC,MAAM,CAAC,IAQN;QACG,MAAM,SAAS,GAAG,IAAI,EAAE,SAAS,CAAC;QAClC,MAAM,OAAO,GAAG,IAAI,EAAE,OAAO,IAAI,EAAE,CAAC;QACpC,MAAM,QAAQ,GAAG,IAAI,EAAE,QAAQ,IAAI,EAAE,CAAC;QACtC,MAAM,cAAc,GAAG,IAAI,EAAE,cAAc,CAAC;QAC5C,MAAM,WAAW,GAAG,IAAI,EAAE,WAAW,IAAI,EAAE,CAAC;QAC5C,MAAM,UAAU,GAAG,IAAI,EAAE,UAAU,IAAI,KAAK,CAAC;QAC7C,MAAM,WAAW,GAAG,IAAI,EAAE,WAAW,IAAI,EAAE,CAAC;QAC5C,MAAM,UAAU,GAAG,IAAI,EAAE,UAAU,IAAI,EAAE,CAAC;QAC1C,MAAM,aAAa,GAAG,IAAI,EAAE,aAAa,IAAI,EAAE,CAAC;QAEhD,gCAAgC;QAChC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAsB,EAAE,EAAE,CAAC;;;8EAGU,MAAM,CAAC,EAAE;sEACjB,MAAM,CAAC,EAAE,OAAO,MAAM,CAAC,IAAI,UAAU,MAAM,CAAC,IAAI;;;+EAGvC,MAAM,CAAC,EAAE,UAAU,MAAM,CAAC,QAAQ;;;wEAGzC,MAAM,CAAC,EAAE;;;SAGxE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEZ,2BAA2B;QAC3B,MAAM,iBAAiB,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,MAAoB,EAAE,EAAE,CAAC;;;gDAG9B,MAAM,CAAC,WAAW;;;4EAGU,MAAM,CAAC,EAAE,iBAAiB,MAAM,CAAC,UAAU;;;8EAGzC,MAAM,CAAC,EAAE;;;SAG9E,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEZ,wCAAwC;QACxC,MAAM,YAAY,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YACrC,yBAAyB;YACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU;YACrD,QAAQ;YACR,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YACnD,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;YAE9D,OAAO;;;gDAG6B,QAAQ;;;;;4EAKoB,IAAI,CAAC,EAAE,cAAc,UAAU;;;yEAGlC,IAAI,CAAC,EAAE;;;aAGnE,CAAC;QACN,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEZ,wBAAwB;QACxB,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAE9F,OAAO;;;;;;MAMT,IAAI,CAAC,SAAS,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gFAgK0D,SAAS,EAAE,IAAI,IAAI,MAAM;;;;;;;;;;;;;;;;;;;;;;;kBAuBvF,WAAW;kBACX,iBAAiB;kBACjB,YAAY;;;;;;;;;;;;;;;gCAeE,UAAU;;;;;kBAKxB,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA0iBtB,CAAC;IACL,CAAC;IAEO,wBAAwB,CAAC,QAAqB;QAClD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAErC,QAAQ;QACR,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;QAElD,IAAI,IAAI,GAAG,uIAAuI,CAAC;QACnJ,IAAI,IAAI,qGAAqG,CAAC;QAC9G,IAAI,IAAI,mCAAmC,CAAC;QAC5C,IAAI,IAAI,oIAAoI,CAAC;QAC7I,IAAI,IAAI,mHAAmH,CAAC;QAC5H,IAAI,IAAI,QAAQ,CAAC;QACjB,IAAI,IAAI,2BAA2B,CAAC;QACpC,IAAI,IAAI,IAAI,CAAC,qBAAqB,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QAClD,IAAI,IAAI,QAAQ,CAAC;QACjB,IAAI,IAAI,iCAAiC,CAAC;QAC1C,IAAI,IAAI,2IAA2I,CAAC;QACpJ,IAAI,IAAI,mHAAmH,CAAC;QAC5H,IAAI,IAAI,cAAc,CAAC;QAEvB,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACK,eAAe,CAAC,QAAqB;QACzC,MAAM,IAAI,GAAqB,EAAE,CAAC;QAElC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YACtB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACrC,IAAI,YAAY,GAAG,IAAI,CAAC;YAExB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACnC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACtB,MAAM,MAAM,GAAG,CAAC,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;gBACtC,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAEjD,IAAI,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;gBAEnD,IAAI,CAAC,IAAI,EAAE;oBACP,IAAI,GAAG;wBACH,IAAI,EAAE,IAAI;wBACV,QAAQ,EAAE,QAAQ;wBAClB,MAAM,EAAE,MAAM;wBACd,QAAQ,EAAE,EAAE;wBACZ,KAAK,EAAE,CAAC;qBACX,CAAC;oBACF,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBAC3B;gBAED,IAAI,MAAM,EAAE;oBACR,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;iBACxB;qBAAM;oBACH,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,CAAC,OAAO;iBACjD;gBAED,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC;aAChC;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACK,qBAAqB,CAAC,KAAuB,EAAE,KAAa;QAChE,IAAI,IAAI,GAAG,EAAE,CAAC;QAEd,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACjB,MAAM,MAAM,GAAG,KAAK,GAAG,EAAE,CAAC;YAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;YAE5D,IAAI,IAAI,CAAC,MAAM,EAAE;gBACb,aAAa;gBACb,IAAI,IAAI,2DAA2D,GAAG,MAAM,GAAG,OAAO,CAAC;gBACvF,IAAI,IAAI,oCAAoC,GAAG,MAAM,GAAG,4BAA4B,CAAC;gBACrF,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,4BAA4B,GAAG,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;gBACxH,IAAI,IAAI,qCAAqC,CAAC;gBAC9C,IAAI,IAAI,2BAA2B,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;gBAC5G,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC;gBAClB,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC3D,IAAI,IAAI,SAAS,CAAC;gBAClB,IAAI,IAAI,QAAQ,CAAC;aACpB;iBAAM;gBACH,QAAQ;gBACR,IAAI,IAAI,+CAA+C,GAAG,MAAM,GAAG,OAAO,CAAC;gBAC3E,IAAI,IAAI,0DAA0D,GAAG,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;gBAC7F,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBACtC,IAAI,IAAI,SAAS,CAAC;gBAClB,IAAI,IAAI,qCAAqC,CAAC;gBAC9C,IAAI,IAAI,4BAA4B,GAAG,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;gBAC7D,IAAI,IAAI,QAAQ,CAAC;gBAEjB,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;oBAC5D,IAAI,IAAI,+BAA+B,CAAC;oBACxC,IAAI,IAAI,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;oBAC7D,IAAI,IAAI,QAAQ,CAAC;iBACpB;aACJ;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;OAEG;IACK,cAAc,CAAC,KAAuB;QAC1C,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACjB,IAAI,IAAI,CAAC,MAAM,EAAE;gBACb,KAAK,EAAE,CAAC;aACX;iBAAM;gBACH,KAAK,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAC/C;QACL,CAAC,CAAC,CAAC;QACH,OAAO,KAAK,CAAC;IACjB,CAAC;CACJ;AAv8BD,gCAu8BC"} \ No newline at end of file +{"version":3,"file":"ConfigView.js","sourceRoot":"","sources":["../../../src/panels/views/ConfigView.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/out/types/DataTypes.js b/out/types/DataTypes.js new file mode 100644 index 0000000..01df013 --- /dev/null +++ b/out/types/DataTypes.js @@ -0,0 +1,4 @@ +"use strict"; +// src/types/DataTypes.ts +Object.defineProperty(exports, "__esModule", { value: true }); +//# sourceMappingURL=DataTypes.js.map \ No newline at end of file diff --git a/out/types/DataTypes.js.map b/out/types/DataTypes.js.map new file mode 100644 index 0000000..2fe9643 --- /dev/null +++ b/out/types/DataTypes.js.map @@ -0,0 +1 @@ +{"version":3,"file":"DataTypes.js","sourceRoot":"","sources":["../../src/types/DataTypes.ts"],"names":[],"mappings":";AAAA,yBAAyB"} \ No newline at end of file diff --git a/src/panels/ConfigPanel.ts b/src/panels/ConfigPanel.ts index 13b03a1..169263b 100755 --- a/src/panels/ConfigPanel.ts +++ b/src/panels/ConfigPanel.ts @@ -34,15 +34,13 @@ interface Config { containerId: string; } -// Git 仓库接口 -interface GitRepo { +// 统一的模块文件夹接口,合并 gitRepos 和 mergedFolders +interface ModuleFolder { id: string; name: string; - url: string; - localPath: string; - branch: string; - lastSync: string; - containerId: string; // 关联到特定容器 + type: 'git' | 'merged'; // 类型标识 + localPath: string; // 相对路径,如 "/项目1/飞行器1/容器1/test-code" + containerId: string; } interface GitFileTree { @@ -59,25 +57,13 @@ interface GitBranch { selected?: boolean; } -interface MergedFolder { - id: string; - displayName: string; // 配置栏显示的名称 - folderName: string; // 实际文件夹名称 - path: string; - fileCount: number; - containerId: string; - originalConfigIds: string[]; - createdAt: string; -} - -// 修改 ProjectData 接口,添加 mergedFolders +// 修改 ProjectData 接口,使用统一的 moduleFolders interface ProjectData { projects: Project[]; aircrafts: Aircraft[]; containers: Container[]; configs: Config[]; - gitRepos: GitRepo[]; - mergedFolders: MergedFolder[]; // 新增合并文件夹数据 + moduleFolders: ModuleFolder[]; // 统一的模块文件夹数据 } export class ConfigPanel { @@ -89,18 +75,17 @@ export class ConfigPanel { private currentProjectId: string = ''; private currentAircraftId: string = ''; private currentContainerId: string = ''; - private currentRepoId: string = ''; + private currentModuleFolderId: string = ''; // 数据存储 private projects: Project[] = []; private aircrafts: Aircraft[] = []; private containers: Container[] = []; private configs: Config[] = []; - private gitRepos: GitRepo[] = []; // Git 仓库数据 - private mergedFolders: MergedFolder[] = []; + private moduleFolders: ModuleFolder[] = []; // 统一的模块文件夹数据 // Git 文件树 - private currentRepoFileTree: GitFileTree[] = []; + private currentModuleFolderFileTree: GitFileTree[] = []; // 项目存储路径映射 private projectPaths: Map = new Map(); @@ -208,7 +193,7 @@ export class ConfigPanel { this.currentProjectId = ''; this.currentAircraftId = ''; this.currentContainerId = ''; - this.currentRepoId = ''; + this.currentModuleFolderId = ''; this.updateWebview(); break; @@ -291,24 +276,24 @@ export class ConfigPanel { this.updateWebview(); break; - case 'loadGitRepo': - await this.loadGitRepo(data.repoId); + case 'loadModuleFolder': + await this.loadModuleFolder(data.folderId); break; - case 'syncGitRepo': - await this.syncGitRepo(data.repoId); + case 'syncGitModuleFolder': + await this.syncGitModuleFolder(data.folderId); break; - case 'deleteGitRepo': - await this.deleteGitRepo(data.repoId); + case 'deleteModuleFolder': + await this.deleteModuleFolder(data.folderId); break; case 'importGitFile': await this.importGitFile(data.filePath); break; - case 'openGitRepoInVSCode': - await this.openTheModuleFolder('git', data.repoId); + case 'openModuleFolderInVSCode': + await this.openTheModuleFolder(data.moduleType, data.folderId); break; case 'openConfigFileInVSCode': @@ -320,7 +305,7 @@ export class ConfigPanel { break; case 'deleteMergedFolder': - await this.deleteMergedFolder(data.folderId); + await this.deleteModuleFolder(data.folderId); break; case 'openMergedFolderInVSCode': @@ -434,9 +419,9 @@ export class ConfigPanel { // === Git 仓库管理方法 === /** - * 添加 Git 仓库到容器目录 + * 添加 Git 模块文件夹到容器目录 */ - private async addGitRepo(url: string, name: string, branch?: string): Promise { + private async addGitModuleFolder(url: string, name: string, branch?: string): Promise { try { // 验证 URL if (!url || !url.startsWith('http')) { @@ -449,9 +434,9 @@ export class ConfigPanel { return; } - const repoId = 'git-' + Date.now(); + const folderId = 'git-' + Date.now(); - // 构建本地路径 - 在容器目录下创建分支子目录 + // 构建本地路径 const container = this.containers.find(c => c.id === this.currentContainerId); if (!container) { vscode.window.showErrorMessage('未找到容器'); @@ -470,41 +455,38 @@ export class ConfigPanel { return; } - // 为每个分支创建独立的子目录 - const branchName = branch || 'main'; - const branchSafeName = branchName.replace(/[^a-zA-Z0-9-_]/g, '-'); - const repoDirName = name; + // 构建相对路径(从项目路径开始) + const relativePath = `/${aircraft.projectId}/${aircraft.name}/${container.name}/${name}`; - // 路径:项目路径/飞行器名/容器名/仓库名-分支名/ - const localPath = path.join(projectPath, aircraft.name, container.name, repoDirName); + // 完整路径用于实际操作 + const localPath = path.join(projectPath, aircraft.name, container.name, name); - console.log(`📁 Git仓库将保存到: ${localPath}`); + console.log(`📁 Git模块文件夹将保存到: ${localPath}`); + console.log(`📁 相对路径: ${relativePath}`); - // 检查是否已存在相同 URL 和分支的仓库 - const existingRepo = this.gitRepos.find(repo => - repo.url === url && repo.branch === branchName && repo.containerId === this.currentContainerId + // 检查是否已存在相同名称的模块文件夹 + const existingFolder = this.moduleFolders.find(folder => + folder.name === name && folder.containerId === this.currentContainerId ); - if (existingRepo) { - vscode.window.showWarningMessage('该 Git 仓库和分支组合已存在'); + if (existingFolder) { + vscode.window.showWarningMessage('该名称的模块文件夹已存在'); return; } - const newRepo: GitRepo = { - id: repoId, - name: `${name} (${branchName})`, // 在名称中包含分支信息 - url: url, - localPath: localPath, - branch: branchName, - lastSync: new Date().toLocaleString(), + const newFolder: ModuleFolder = { + id: folderId, + name: name, + type: 'git', + localPath: relativePath, // 存储相对路径 containerId: this.currentContainerId }; - console.log(`📁 准备克隆仓库: ${name}, 分支: ${newRepo.branch}, 路径: ${localPath}`); + console.log(`📁 准备克隆仓库: ${name}, 分支: ${branch}, 路径: ${localPath}`); // 显示进度 await vscode.window.withProgress({ location: vscode.ProgressLocation.Notification, - title: `正在克隆仓库: ${name} (${newRepo.branch})`, + title: `正在克隆仓库: ${name}`, cancellable: false }, async (progress) => { progress.report({ increment: 0 }); @@ -545,7 +527,7 @@ export class ConfigPanel { url: url, singleBranch: true, depth: 1, - ref: branchName, + ref: branch || 'main', onProgress: (event: any) => { if (event.total) { const percent = (event.loaded / event.total) * 100; @@ -556,19 +538,19 @@ export class ConfigPanel { console.log('✅ Git克隆成功完成'); - this.gitRepos.push(newRepo); + this.moduleFolders.push(newFolder); await this.saveCurrentProjectData(); - console.log('✅ Git仓库数据已保存到项目文件'); + console.log('✅ Git模块文件夹数据已保存到项目文件'); - vscode.window.showInformationMessage(`Git 仓库克隆成功: ${name} (${newRepo.branch})`); + vscode.window.showInformationMessage(`Git 仓库克隆成功: ${name}`); // 检查 Webview 状态后再加载文件树 if (!this.isWebviewDisposed) { - console.log('🌳 开始加载仓库文件树...'); - // 自动加载仓库文件树 - this.currentRepoId = repoId; - await this.loadGitRepoFileTree(repoId); - console.log('✅ 仓库文件树加载完成'); + console.log('🌳 开始加载模块文件夹文件树...'); + // 自动加载文件树 + this.currentModuleFolderId = folderId; + await this.loadModuleFolderFileTree(folderId); + console.log('✅ 模块文件夹文件树加载完成'); } else { console.log('⚠️ Webview 已被销毁,跳过文件树加载'); } @@ -580,33 +562,43 @@ export class ConfigPanel { }); } catch (error) { - console.error('❌ 在addGitRepo外部捕获错误:', error); - vscode.window.showErrorMessage(`添加 Git 仓库失败: ${error}`); + console.error('❌ 在addGitModuleFolder外部捕获错误:', error); + vscode.window.showErrorMessage(`添加 Git 模块文件夹失败: ${error}`); } } /** - * 加载 Git 仓库文件树 + * 加载模块文件夹 */ - private async loadGitRepo(repoId: string): Promise { - this.currentRepoId = repoId; - await this.loadGitRepoFileTree(repoId); + private async loadModuleFolder(folderId: string): Promise { + this.currentModuleFolderId = folderId; + const folder = this.moduleFolders.find(f => f.id === folderId); + if (folder && folder.type === 'git') { + await this.loadModuleFolderFileTree(folderId); + } this.updateWebview(); } /** - * 同步 Git 仓库 + * 同步 Git 模块文件夹 */ - private async syncGitRepo(repoId: string): Promise { - const repo = this.gitRepos.find(r => r.id === repoId); - if (!repo) { - vscode.window.showErrorMessage('未找到指定的 Git 仓库'); + private async syncGitModuleFolder(folderId: string): Promise { + const folder = this.moduleFolders.find(f => f.id === folderId); + if (!folder || folder.type !== 'git') { + vscode.window.showErrorMessage('未找到指定的 Git 模块文件夹'); + return; + } + + // 获取完整路径 + const fullPath = this.getModuleFolderFullPath(folder); + if (!fullPath) { + vscode.window.showErrorMessage('无法获取模块文件夹的完整路径'); return; } await vscode.window.withProgress({ location: vscode.ProgressLocation.Notification, - title: `正在同步仓库: ${repo.name}`, + title: `正在同步仓库: ${folder.name}`, cancellable: false }, async (progress) => { try { @@ -616,19 +608,15 @@ export class ConfigPanel { await git.pull({ fs: fs, http: http, - dir: repo.localPath, + dir: fullPath, author: { name: 'DCSP User', email: 'user@dcsp.local' }, fastForward: true }); - // 更新最后同步时间 - repo.lastSync = new Date().toLocaleString(); - await this.saveCurrentProjectData(); - // 重新加载文件树 - await this.loadGitRepoFileTree(repoId); + await this.loadModuleFolderFileTree(folderId); - vscode.window.showInformationMessage(`Git 仓库同步成功: ${repo.name}`); + vscode.window.showInformationMessage(`Git 仓库同步成功: ${folder.name}`); this.updateWebview(); } catch (error) { @@ -638,14 +626,14 @@ export class ConfigPanel { } /** - * 删除 Git 仓库 + * 删除模块文件夹 */ - private async deleteGitRepo(repoId: string): Promise { - const repo = this.gitRepos.find(r => r.id === repoId); - if (!repo) return; + private async deleteModuleFolder(folderId: string): Promise { + const folder = this.moduleFolders.find(f => f.id === folderId); + if (!folder) return; const confirm = await vscode.window.showWarningMessage( - `确定要删除 Git 仓库 "${repo.name}" 吗?这将删除本地文件。`, + `确定要删除模块文件夹 "${folder.name}" 吗?这将删除本地文件。`, { modal: true }, '确定删除', '取消' @@ -653,45 +641,48 @@ export class ConfigPanel { if (confirm === '确定删除') { try { - // 删除整个仓库目录(因为是独立目录) - await fs.promises.rm(repo.localPath, { recursive: true, force: true }); - - // 从列表中移除 - this.gitRepos = this.gitRepos.filter(r => r.id !== repoId); - await this.saveCurrentProjectData(); - - // 如果删除的是当前仓库,清空状态 - if (this.currentRepoId === repoId) { - this.currentRepoId = ''; - this.currentRepoFileTree = []; + // 获取完整路径并删除文件夹 + const fullPath = this.getModuleFolderFullPath(folder); + if (fullPath) { + await fs.promises.rm(fullPath, { recursive: true, force: true }); } - vscode.window.showInformationMessage(`Git 仓库已删除: ${repo.name}`); + // 从列表中移除 + this.moduleFolders = this.moduleFolders.filter(f => f.id !== folderId); + await this.saveCurrentProjectData(); + + // 如果删除的是当前文件夹,清空状态 + if (this.currentModuleFolderId === folderId) { + this.currentModuleFolderId = ''; + this.currentModuleFolderFileTree = []; + } + + vscode.window.showInformationMessage(`模块文件夹已删除: ${folder.name}`); this.updateWebview(); } catch (error) { - vscode.window.showErrorMessage(`删除 Git 仓库失败: ${error}`); + vscode.window.showErrorMessage(`删除模块文件夹失败: ${error}`); } } } /** - * 加载 Git 仓库文件树 + * 加载模块文件夹文件树 */ - private async loadGitRepoFileTree(repoId: string): Promise { + private async loadModuleFolderFileTree(folderId: string): Promise { // 检查 Webview 是否仍然有效 if (this.isWebviewDisposed) { console.log('⚠️ Webview 已被销毁,跳过文件树加载'); return; } - const repo = this.gitRepos.find(r => r.id === repoId); - if (!repo) return; + const folder = this.moduleFolders.find(f => f.id === folderId); + if (!folder) return; // 通知前端开始加载 try { this.panel.webview.postMessage({ - type: 'gitRepoLoading', + type: 'moduleFolderLoading', loading: true }); } catch (error) { @@ -700,16 +691,15 @@ export class ConfigPanel { } try { - const fileTree = await this.buildFileTree(repo.localPath); - this.currentRepoFileTree = fileTree; - - // 更新最后访问时间 - repo.lastSync = new Date().toLocaleString(); - await this.saveCurrentProjectData(); + const fullPath = this.getModuleFolderFullPath(folder); + if (fullPath) { + const fileTree = await this.buildFileTree(fullPath); + this.currentModuleFolderFileTree = fileTree; + } } catch (error) { - console.error('加载仓库文件树失败:', error); - this.currentRepoFileTree = []; + console.error('加载模块文件夹文件树失败:', error); + this.currentModuleFolderFileTree = []; } // 再次检查 Webview 状态 @@ -721,7 +711,7 @@ export class ConfigPanel { // 通知前端加载完成 try { this.panel.webview.postMessage({ - type: 'gitRepoLoading', + type: 'moduleFolderLoading', loading: false }); @@ -776,14 +766,14 @@ export class ConfigPanel { * 导入 Git 文件到当前容器 */ private async importGitFile(filePath: string): Promise { - if (!this.currentRepoId || !this.currentContainerId) { - vscode.window.showErrorMessage('请先选择 Git 仓库和容器'); + if (!this.currentModuleFolderId || !this.currentContainerId) { + vscode.window.showErrorMessage('请先选择模块文件夹和容器'); return; } - const repo = this.gitRepos.find(r => r.id === this.currentRepoId); - if (!repo) { - vscode.window.showErrorMessage('未找到当前 Git 仓库'); + const folder = this.moduleFolders.find(f => f.id === this.currentModuleFolderId); + if (!folder || folder.type !== 'git') { + vscode.window.showErrorMessage('未找到当前 Git 模块文件夹'); return; } @@ -794,8 +784,14 @@ export class ConfigPanel { } try { - const fullPath = path.join(repo.localPath, filePath); - const content = await fs.promises.readFile(fullPath, 'utf8'); + const fullPath = this.getModuleFolderFullPath(folder); + if (!fullPath) { + vscode.window.showErrorMessage('无法获取模块文件夹路径'); + return; + } + + const fileFullPath = path.join(fullPath, filePath); + const content = await fs.promises.readFile(fileFullPath, 'utf8'); const fileName = path.basename(filePath); // 创建新配置 @@ -847,116 +843,108 @@ export class ConfigPanel { * 保存当前项目数据到项目路径 */ private async saveCurrentProjectData(): Promise { - try { - if (!this.currentProjectId) { - console.warn('未找到当前项目,数据将不会保存'); - return; + try { + if (!this.currentProjectId) { + console.warn('未找到当前项目,数据将不会保存'); + return; + } + + const projectPath = this.projectPaths.get(this.currentProjectId); + if (!projectPath) { + console.warn('未找到项目存储路径,数据将不会保存'); + return; + } + + const dataUri = vscode.Uri.joinPath(vscode.Uri.file(projectPath), '.dcsp-data.json'); + + // 只保存与当前项目相关的数据 + const currentProjectAircrafts = this.aircrafts.filter(a => a.projectId === this.currentProjectId); + const currentAircraftIds = currentProjectAircrafts.map(a => a.id); + const currentProjectContainers = this.containers.filter(c => currentAircraftIds.includes(c.aircraftId)); + const currentContainerIds = currentProjectContainers.map(c => c.id); + const currentProjectConfigs = this.configs.filter(cfg => currentContainerIds.includes(cfg.containerId)); + + // 只保存与当前项目容器相关的模块文件夹 + const currentProjectModuleFolders = this.moduleFolders.filter(folder => + currentContainerIds.includes(folder.containerId) + ); + + const data: ProjectData = { + projects: this.projects.filter(p => p.id === this.currentProjectId), + aircrafts: currentProjectAircrafts, + containers: currentProjectContainers, + configs: currentProjectConfigs, + moduleFolders: currentProjectModuleFolders // 保存模块文件夹数据 + }; + + const uint8Array = new TextEncoder().encode(JSON.stringify(data, null, 2)); + await vscode.workspace.fs.writeFile(dataUri, uint8Array); + + console.log('✅ 当前项目数据已保存,包含', currentProjectModuleFolders.length, '个模块文件夹'); + } catch (error) { + vscode.window.showErrorMessage(`保存项目数据失败: ${error}`); } - - const projectPath = this.projectPaths.get(this.currentProjectId); - if (!projectPath) { - console.warn('未找到项目存储路径,数据将不会保存'); - return; - } - - const dataUri = vscode.Uri.joinPath(vscode.Uri.file(projectPath), '.dcsp-data.json'); - - // 只保存与当前项目相关的数据 - const currentProjectAircrafts = this.aircrafts.filter(a => a.projectId === this.currentProjectId); - const currentAircraftIds = currentProjectAircrafts.map(a => a.id); - const currentProjectContainers = this.containers.filter(c => currentAircraftIds.includes(c.aircraftId)); - const currentContainerIds = currentProjectContainers.map(c => c.id); - const currentProjectConfigs = this.configs.filter(cfg => currentContainerIds.includes(cfg.containerId)); - - // 只保存与当前项目容器相关的 Git 仓库和合并文件夹 - const currentProjectGitRepos = this.gitRepos.filter(repo => - currentContainerIds.includes(repo.containerId) - ); - const currentProjectMergedFolders = this.mergedFolders.filter(folder => - currentContainerIds.includes(folder.containerId) - ); - - const data: ProjectData = { - projects: this.projects.filter(p => p.id === this.currentProjectId), - aircrafts: currentProjectAircrafts, - containers: currentProjectContainers, - configs: currentProjectConfigs, - gitRepos: currentProjectGitRepos, - mergedFolders: currentProjectMergedFolders // 保存合并文件夹数据 - }; - - const uint8Array = new TextEncoder().encode(JSON.stringify(data, null, 2)); - await vscode.workspace.fs.writeFile(dataUri, uint8Array); - - console.log('✅ 当前项目数据已保存,包含', currentProjectGitRepos.length, '个 Git 仓库和', currentProjectMergedFolders.length, '个合并文件夹'); - } catch (error) { - vscode.window.showErrorMessage(`保存项目数据失败: ${error}`); } -} /** * 从项目路径加载数据 */ private async loadProjectData(projectPath: string): Promise { - try { - const dataUri = vscode.Uri.joinPath(vscode.Uri.file(projectPath), '.dcsp-data.json'); - - // 检查数据文件是否存在 try { - await vscode.workspace.fs.stat(dataUri); - } catch { - vscode.window.showErrorMessage('选择的文件夹中没有找到项目数据文件 (.dcsp-data.json)'); + const dataUri = vscode.Uri.joinPath(vscode.Uri.file(projectPath), '.dcsp-data.json'); + + // 检查数据文件是否存在 + try { + await vscode.workspace.fs.stat(dataUri); + } catch { + vscode.window.showErrorMessage('选择的文件夹中没有找到项目数据文件 (.dcsp-data.json)'); + return false; + } + + // 读取数据文件 + const fileData = await vscode.workspace.fs.readFile(dataUri); + const dataStr = new TextDecoder().decode(fileData); + const data: ProjectData = JSON.parse(dataStr); + + // 清空现有数据 + this.projects = []; + this.aircrafts = []; + this.containers = []; + this.configs = []; + this.moduleFolders = []; // 清空模块文件夹数据 + + // 验证数据格式并加载 + if (data.projects && Array.isArray(data.projects)) { + this.projects = data.projects; + } + if (data.aircrafts && Array.isArray(data.aircrafts)) { + this.aircrafts = data.aircrafts; + } + if (data.containers && Array.isArray(data.containers)) { + this.containers = data.containers; + } + if (data.configs && Array.isArray(data.configs)) { + this.configs = data.configs; + } + if (data.moduleFolders && Array.isArray(data.moduleFolders)) { + this.moduleFolders = data.moduleFolders; // 加载模块文件夹数据 + } + + // 设置当前项目为第一个项目(如果有的话) + if (this.projects.length > 0) { + this.currentProjectId = this.projects[0].id; + this.projectPaths.set(this.currentProjectId, projectPath); + this.currentView = 'aircrafts'; + } + + vscode.window.showInformationMessage(`项目数据已从 ${projectPath} 加载,包含 ${this.moduleFolders.length} 个模块文件夹`); + this.updateWebview(); + return true; + } catch (error) { + vscode.window.showErrorMessage(`加载项目数据失败: ${error}`); return false; } - - // 读取数据文件 - const fileData = await vscode.workspace.fs.readFile(dataUri); - const dataStr = new TextDecoder().decode(fileData); - const data: ProjectData = JSON.parse(dataStr); - - // 清空现有数据 - this.projects = []; - this.aircrafts = []; - this.containers = []; - this.configs = []; - this.gitRepos = []; - this.mergedFolders = []; // 清空合并文件夹数据 - - // 验证数据格式并加载 - if (data.projects && Array.isArray(data.projects)) { - this.projects = data.projects; - } - if (data.aircrafts && Array.isArray(data.aircrafts)) { - this.aircrafts = data.aircrafts; - } - if (data.containers && Array.isArray(data.containers)) { - this.containers = data.containers; - } - if (data.configs && Array.isArray(data.configs)) { - this.configs = data.configs; - } - if (data.gitRepos && Array.isArray(data.gitRepos)) { - this.gitRepos = data.gitRepos; - } - if (data.mergedFolders && Array.isArray(data.mergedFolders)) { - this.mergedFolders = data.mergedFolders; // 加载合并文件夹数据 - } - - // 设置当前项目为第一个项目(如果有的话) - if (this.projects.length > 0) { - this.currentProjectId = this.projects[0].id; - this.projectPaths.set(this.currentProjectId, projectPath); - this.currentView = 'aircrafts'; - } - - vscode.window.showInformationMessage(`项目数据已从 ${projectPath} 加载,包含 ${this.gitRepos.length} 个 Git 仓库和 ${this.mergedFolders.length} 个合并文件夹`); - this.updateWebview(); - return true; - } catch (error) { - vscode.window.showErrorMessage(`加载项目数据失败: ${error}`); - return false; } -} /** * 检查项目路径是否已存在数据 @@ -1122,8 +1110,8 @@ export class ConfigPanel { // 删除相关的配置 const containerIds = this.containers.filter(c => aircraftIds.includes(c.aircraftId)).map(c => c.id); this.configs = this.configs.filter(cfg => !containerIds.includes(cfg.containerId)); - // 删除相关的 Git 仓库 - this.gitRepos = this.gitRepos.filter(repo => !containerIds.includes(repo.containerId)); + // 删除相关的模块文件夹 + this.moduleFolders = this.moduleFolders.filter(folder => !containerIds.includes(folder.containerId)); // 删除项目路径映射 this.projectPaths.delete(projectId); @@ -1177,8 +1165,8 @@ export class ConfigPanel { // 删除相关的配置 const containerIds = this.containers.filter(c => c.aircraftId === aircraftId).map(c => c.id); this.configs = this.configs.filter(cfg => !containerIds.includes(cfg.containerId)); - // 删除相关的 Git 仓库 - this.gitRepos = this.gitRepos.filter(repo => !containerIds.includes(repo.containerId)); + // 删除相关的模块文件夹 + this.moduleFolders = this.moduleFolders.filter(folder => !containerIds.includes(folder.containerId)); vscode.window.showInformationMessage(`删除飞行器: ${aircraft.name}`); await this.saveCurrentProjectData(); @@ -1252,8 +1240,8 @@ export class ConfigPanel { // 删除相关的配置 this.configs = this.configs.filter(cfg => cfg.containerId !== containerId); - // 删除相关的 Git 仓库 - this.gitRepos = this.gitRepos.filter(repo => repo.containerId !== containerId); + // 删除相关的模块文件夹 + this.moduleFolders = this.moduleFolders.filter(folder => folder.containerId !== containerId); vscode.window.showInformationMessage(`删除容器: ${container.name}`); await this.saveCurrentProjectData(); @@ -1341,133 +1329,133 @@ export class ConfigPanel { // === Git 分支管理 === private async fetchBranches(url: string): Promise { - try { - console.log('🌿 开始获取分支列表:', url); - - await vscode.window.withProgress({ - location: vscode.ProgressLocation.Notification, - title: '正在获取分支信息', - cancellable: false - }, async (progress) => { - progress.report({ increment: 0, message: '连接远程仓库...' }); + try { + console.log('🌿 开始获取分支列表:', url); + + await vscode.window.withProgress({ + location: vscode.ProgressLocation.Notification, + title: '正在获取分支信息', + cancellable: false + }, async (progress) => { + progress.report({ increment: 0, message: '连接远程仓库...' }); - try { - // 使用 isomorphic-git 的 listServerRefs - progress.report({ increment: 30, message: '获取远程引用...' }); - - console.log('🔍 使用 listServerRefs 获取分支信息...'); - - const refs = await git.listServerRefs({ - http: http, - url: url - }); - - console.log('📋 获取到的引用:', refs); - - // 过滤出分支引用 (refs/heads/ 和 refs/remotes/origin/) - const branchRefs = refs.filter(ref => - ref.ref.startsWith('refs/heads/') || ref.ref.startsWith('refs/remotes/origin/') - ); - - console.log('🌿 过滤后的分支引用:', branchRefs); - - // 构建分支数据 - 修复分支名称显示 - const branches: GitBranch[] = branchRefs.map(ref => { - let branchName: string; + try { + // 使用 isomorphic-git 的 listServerRefs + progress.report({ increment: 30, message: '获取远程引用...' }); - if (ref.ref.startsWith('refs/remotes/')) { - // 远程分支:移除 refs/remotes/origin/ 前缀 - branchName = ref.ref.replace('refs/remotes/origin/', ''); - } else { - // 本地分支:移除 refs/heads/ 前缀 - branchName = ref.ref.replace('refs/heads/', ''); - } + console.log('🔍 使用 listServerRefs 获取分支信息...'); - return { - name: branchName, - isCurrent: branchName === 'main' || branchName === 'master', - selected: false // 所有分支默认不选中 - }; - }); - - console.log('🎯 最终分支列表:', branches); - - if (branches.length === 0) { - throw new Error('未找到任何分支'); - } - - progress.report({ increment: 80, message: '处理分支数据...' }); - - // === 新增:构建分支树状结构 === - const branchTree = this.buildBranchTree(branches); - console.log('🌳 构建的分支树结构:', branchTree); - - // 发送分支数据到前端 - 同时包含扁平列表和树状结构 - if (!this.isWebviewDisposed) { - this.panel.webview.postMessage({ - type: 'branchesFetched', - branches: branches, - branchTree: branchTree, // 新增树状结构数据 - repoUrl: url + const refs = await git.listServerRefs({ + http: http, + url: url }); + + console.log('📋 获取到的引用:', refs); + + // 过滤出分支引用 (refs/heads/ 和 refs/remotes/origin/) + const branchRefs = refs.filter(ref => + ref.ref.startsWith('refs/heads/') || ref.ref.startsWith('refs/remotes/origin/') + ); + + console.log('🌿 过滤后的分支引用:', branchRefs); + + // 构建分支数据 - 修复分支名称显示 + const branches: GitBranch[] = branchRefs.map(ref => { + let branchName: string; + + if (ref.ref.startsWith('refs/remotes/')) { + // 远程分支:移除 refs/remotes/origin/ 前缀 + branchName = ref.ref.replace('refs/remotes/origin/', ''); + } else { + // 本地分支:移除 refs/heads/ 前缀 + branchName = ref.ref.replace('refs/heads/', ''); + } + + return { + name: branchName, + isCurrent: branchName === 'main' || branchName === 'master', + selected: false // 所有分支默认不选中 + }; + }); + + console.log('🎯 最终分支列表:', branches); + + if (branches.length === 0) { + throw new Error('未找到任何分支'); + } + + progress.report({ increment: 80, message: '处理分支数据...' }); + + // === 新增:构建分支树状结构 === + const branchTree = this.buildBranchTree(branches); + console.log('🌳 构建的分支树结构:', branchTree); + + // 发送分支数据到前端 - 同时包含扁平列表和树状结构 + if (!this.isWebviewDisposed) { + this.panel.webview.postMessage({ + type: 'branchesFetched', + branches: branches, + branchTree: branchTree, // 新增树状结构数据 + repoUrl: url + }); + } + + progress.report({ increment: 100, message: '完成' }); + + } catch (error) { + console.error('❌ 使用 listServerRefs 获取分支失败:', error); + + // 只在右下角显示分支获取失败的通知,不模拟分支数据 + vscode.window.showErrorMessage(`获取分支失败: ${error}`); } + }); - progress.report({ increment: 100, message: '完成' }); + } catch (error) { + console.error('❌ 获取分支失败:', error); + vscode.window.showErrorMessage(`获取分支失败: ${error}`); + } + } - } catch (error) { - console.error('❌ 使用 listServerRefs 获取分支失败:', error); + /** + * 构建分支树状结构 + */ + private buildBranchTree(branches: GitBranch[]): any[] { + const root: any[] = []; + + branches.forEach(branch => { + const parts = branch.name.split('/'); + let currentLevel = root; + + for (let i = 0; i < parts.length; i++) { + const part = parts[i]; + const isLeaf = i === parts.length - 1; + const fullName = parts.slice(0, i + 1).join('/'); - // 只在右下角显示分支获取失败的通知,不模拟分支数据 - vscode.window.showErrorMessage(`获取分支失败: ${error}`); + let node = currentLevel.find((n: any) => n.name === part); + + if (!node) { + node = { + name: part, + fullName: fullName, + isLeaf: isLeaf, + children: [], + level: i, + expanded: true // 默认展开 + }; + currentLevel.push(node); + } + + if (isLeaf) { + // 叶子节点存储分支信息 + node.branch = branch; + } + + currentLevel = node.children; } }); - - } catch (error) { - console.error('❌ 获取分支失败:', error); - vscode.window.showErrorMessage(`获取分支失败: ${error}`); - } -} - -/** - * 构建分支树状结构 - */ -private buildBranchTree(branches: GitBranch[]): any[] { - const root: any[] = []; - - branches.forEach(branch => { - const parts = branch.name.split('/'); - let currentLevel = root; - for (let i = 0; i < parts.length; i++) { - const part = parts[i]; - const isLeaf = i === parts.length - 1; - const fullName = parts.slice(0, i + 1).join('/'); - - let node = currentLevel.find((n: any) => n.name === part); - - if (!node) { - node = { - name: part, - fullName: fullName, - isLeaf: isLeaf, - children: [], - level: i, - expanded: true // 默认展开 - }; - currentLevel.push(node); - } - - if (isLeaf) { - // 叶子节点存储分支信息 - node.branch = branch; - } - - currentLevel = node.children; - } - }); - - return root; -} + return root; + } private async cloneBranches(url: string, branches: string[]): Promise { try { @@ -1488,7 +1476,7 @@ private buildBranchTree(branches: GitBranch[]): any[] { }); console.log(`📥 克隆分支: ${branch}`); - await this.addGitRepo(url, this.generateRepoName(url, branch), branch); + await this.addGitModuleFolder(url, this.generateModuleFolderName(url, branch), branch); } }); @@ -1500,7 +1488,7 @@ private buildBranchTree(branches: GitBranch[]): any[] { } } - private generateRepoName(url: string, branch: string): string { + private generateModuleFolderName(url: string, branch: string): string { const repoName = url.split('/').pop()?.replace('.git', '') || 'unknown-repo'; const branchSafeName = branch.replace(/[^a-zA-Z0-9-_]/g, '-'); return `${repoName}-${branchSafeName}`; @@ -1522,75 +1510,74 @@ private buildBranchTree(branches: GitBranch[]): any[] { } private getWebviewContent(): string { - switch (this.currentView) { - case 'projects': - return this.projectView.render({ - projects: this.projects, - projectPaths: this.projectPaths - }); - case 'aircrafts': - const projectAircrafts = this.aircrafts.filter(a => a.projectId === this.currentProjectId); - return this.aircraftView.render({ - aircrafts: projectAircrafts - }); - case 'containers': - const currentProject = this.projects.find(p => p.id === this.currentProjectId); - const currentAircraft = this.aircrafts.find(a => a.id === this.currentAircraftId); - const projectContainers = this.containers.filter(c => c.aircraftId === this.currentAircraftId); - - return this.containerView.render({ - project: currentProject, - aircraft: currentAircraft, - containers: projectContainers - }); - case 'configs': - const currentContainer = this.containers.find(c => c.id === this.currentContainerId); - const containerConfigs = this.configs.filter(cfg => cfg.containerId === this.currentContainerId); - const currentRepo = this.gitRepos.find(r => r.id === this.currentRepoId); - - // 获取当前容器的 Git 仓库和合并文件夹 - const containerGitRepos = this.gitRepos.filter(repo => repo.containerId === this.currentContainerId); - const containerMergedFolders = this.mergedFolders.filter(folder => folder.containerId === this.currentContainerId); - - return this.configView.render({ - container: currentContainer, - configs: containerConfigs, - gitRepos: containerGitRepos, - currentGitRepo: currentRepo, - gitFileTree: this.currentRepoFileTree, - gitLoading: false, - mergedFolders: containerMergedFolders // 传递合并文件夹数据 - }); - default: - return this.projectView.render({ - projects: this.projects, - projectPaths: this.projectPaths - }); + switch (this.currentView) { + case 'projects': + return this.projectView.render({ + projects: this.projects, + projectPaths: this.projectPaths + }); + case 'aircrafts': + const projectAircrafts = this.aircrafts.filter(a => a.projectId === this.currentProjectId); + return this.aircraftView.render({ + aircrafts: projectAircrafts + }); + case 'containers': + const currentProject = this.projects.find(p => p.id === this.currentProjectId); + const currentAircraft = this.aircrafts.find(a => a.id === this.currentAircraftId); + const projectContainers = this.containers.filter(c => c.aircraftId === this.currentAircraftId); + + return this.containerView.render({ + project: currentProject, + aircraft: currentAircraft, + containers: projectContainers + }); + case 'configs': + const currentContainer = this.containers.find(c => c.id === this.currentContainerId); + const containerConfigs = this.configs.filter(cfg => cfg.containerId === this.currentContainerId); + const currentModuleFolder = this.moduleFolders.find(f => f.id === this.currentModuleFolderId); + + // 获取当前容器的模块文件夹 + const containerModuleFolders = this.moduleFolders.filter(folder => folder.containerId === this.currentContainerId); + + return this.configView.render({ + container: currentContainer, + configs: containerConfigs, + moduleFolders: containerModuleFolders, + currentModuleFolder: currentModuleFolder, + moduleFolderFileTree: this.currentModuleFolderFileTree, + moduleFolderLoading: false + }); + default: + return this.projectView.render({ + projects: this.projects, + projectPaths: this.projectPaths + }); + } } -} - private async openGitRepoInVSCode(repoId: string): Promise { - const repo = this.gitRepos.find(r => r.id === repoId); - if (!repo) { - vscode.window.showErrorMessage('未找到指定的 Git 仓库'); + private async openGitRepoInVSCode(folderId: string): Promise { + const folder = this.moduleFolders.find(f => f.id === folderId); + if (!folder) { + vscode.window.showErrorMessage('未找到指定的模块文件夹'); return; } try { - // 检查仓库目录是否存在 - if (!fs.existsSync(repo.localPath)) { - vscode.window.showErrorMessage('Git 仓库目录不存在,请重新克隆'); + // 检查文件夹是否存在 + const fullPath = this.getModuleFolderFullPath(folder); + if (!fullPath || !fs.existsSync(fullPath)) { + vscode.window.showErrorMessage('模块文件夹目录不存在'); return; } // 使用 VSCode 的文件选择器让用户选择要打开的文件 const fileUri = await vscode.window.showOpenDialog({ - defaultUri: vscode.Uri.file(repo.localPath), + defaultUri: vscode.Uri.file(fullPath), canSelectFiles: true, canSelectFolders: false, canSelectMany: false, openLabel: '选择要打开的文件', - title: `在 ${repo.name} 中选择文件` + title: `在 ${folder.name} 中选择文件` }); if (fileUri && fileUri.length > 0) { @@ -1601,7 +1588,7 @@ private buildBranchTree(branches: GitBranch[]): any[] { } } catch (error) { - vscode.window.showErrorMessage(`打开 Git 仓库文件失败: ${error}`); + vscode.window.showErrorMessage(`打开模块文件夹文件失败: ${error}`); } } @@ -1653,191 +1640,161 @@ private buildBranchTree(branches: GitBranch[]): any[] { } } -private async mergeConfigs(configIds: string[], displayName: string, folderName: string): Promise { - try { - if (!this.currentContainerId) { - vscode.window.showErrorMessage('未找到当前容器'); - return; - } - - if (configIds.length < 2) { - vscode.window.showErrorMessage('请至少选择两个配置文件进行合并'); - return; - } - - const container = this.containers.find(c => c.id === this.currentContainerId); - if (!container) { - vscode.window.showErrorMessage('未找到容器'); - return; - } - - const aircraft = this.aircrafts.find(a => a.id === container.aircraftId); - if (!aircraft) { - vscode.window.showErrorMessage('未找到飞行器'); - return; - } - - const projectPath = this.projectPaths.get(aircraft.projectId); - if (!projectPath) { - vscode.window.showErrorMessage('未设置项目存储路径'); - return; - } - - // 获取选中的配置文件 - const selectedConfigs = this.configs.filter(config => configIds.includes(config.id)); - if (selectedConfigs.length !== configIds.length) { - vscode.window.showErrorMessage('部分配置文件未找到'); - return; - } - - // 创建合并文件夹 - const mergeFolderPath = path.join(projectPath, aircraft.name, container.name, folderName); - await fs.promises.mkdir(mergeFolderPath, { recursive: true }); - - // 将选中的配置文件复制到合并文件夹中 - const copiedFiles: string[] = []; - for (const config of selectedConfigs) { - const sourcePath = path.join(projectPath, aircraft.name, container.name, config.fileName); - const targetPath = path.join(mergeFolderPath, config.fileName); - - if (fs.existsSync(sourcePath)) { - await fs.promises.copyFile(sourcePath, targetPath); - copiedFiles.push(config.fileName); - console.log(`✅ 已复制配置文件: ${config.fileName}`); - } else { - // 如果源文件不存在,创建新文件 - await fs.promises.writeFile(targetPath, config.content || ''); - copiedFiles.push(config.fileName); - console.log(`✅ 已创建配置文件: ${config.fileName}`); + private async mergeConfigs(configIds: string[], displayName: string, folderName: string): Promise { + try { + if (!this.currentContainerId) { + vscode.window.showErrorMessage('未找到当前容器'); + return; } - } - // 创建合并文件夹记录 - const newFolder: MergedFolder = { - id: 'merged-' + Date.now(), - displayName: displayName, // 使用传入的显示名称 - folderName: folderName, // 使用传入的文件夹名称 - path: mergeFolderPath, - fileCount: copiedFiles.length, - containerId: this.currentContainerId, - originalConfigIds: configIds, - createdAt: new Date().toLocaleString() - }; + if (configIds.length < 2) { + vscode.window.showErrorMessage('请至少选择两个配置文件进行合并'); + return; + } - // 添加到合并文件夹列表 - this.mergedFolders.push(newFolder); + const container = this.containers.find(c => c.id === this.currentContainerId); + if (!container) { + vscode.window.showErrorMessage('未找到容器'); + return; + } - // 删除原始配置文件 - for (const configId of configIds) { - await this.deleteConfigInternal(configId); - } - - // 保存数据 - await this.saveCurrentProjectData(); - - vscode.window.showInformationMessage(`成功合并 ${selectedConfigs.length} 个配置文件到文件夹: ${folderName}`); - - // 更新UI(不自动打开文件夹) - this.updateWebview(); - - } catch (error) { - console.error('❌ 合并配置文件失败:', error); - vscode.window.showErrorMessage(`合并配置文件失败: ${error}`); - } -} - -/** - * 内部删除配置文件方法(不显示确认对话框) - */ -private async deleteConfigInternal(configId: string): Promise { - try { - const config = this.configs.find(c => c.id === configId); - if (!config) return; - - // 从内存中删除配置 - this.configs = this.configs.filter(c => c.id !== configId); - - // 删除磁盘上的配置文件 - const container = this.containers.find(c => c.id === config.containerId); - if (container) { const aircraft = this.aircrafts.find(a => a.id === container.aircraftId); - if (aircraft) { - const projectPath = this.projectPaths.get(aircraft.projectId); - if (projectPath) { - const filePath = path.join(projectPath, aircraft.name, container.name, config.fileName); - - // 检查文件是否存在,如果存在则删除 - if (fs.existsSync(filePath)) { - await fs.promises.unlink(filePath); - console.log(`✅ 已删除配置文件: ${filePath}`); - } + if (!aircraft) { + vscode.window.showErrorMessage('未找到飞行器'); + return; + } + + const projectPath = this.projectPaths.get(aircraft.projectId); + if (!projectPath) { + vscode.window.showErrorMessage('未设置项目存储路径'); + return; + } + + // 获取选中的配置文件 + const selectedConfigs = this.configs.filter(config => configIds.includes(config.id)); + if (selectedConfigs.length !== configIds.length) { + vscode.window.showErrorMessage('部分配置文件未找到'); + return; + } + + // 创建合并文件夹 + const mergeFolderPath = path.join(projectPath, aircraft.name, container.name, folderName); + await fs.promises.mkdir(mergeFolderPath, { recursive: true }); + + // 将选中的配置文件复制到合并文件夹中 + const copiedFiles: string[] = []; + for (const config of selectedConfigs) { + const sourcePath = path.join(projectPath, aircraft.name, container.name, config.fileName); + const targetPath = path.join(mergeFolderPath, config.fileName); + + if (fs.existsSync(sourcePath)) { + await fs.promises.copyFile(sourcePath, targetPath); + copiedFiles.push(config.fileName); + console.log(`✅ 已复制配置文件: ${config.fileName}`); + } else { + // 如果源文件不存在,创建新文件 + await fs.promises.writeFile(targetPath, config.content || ''); + copiedFiles.push(config.fileName); + console.log(`✅ 已创建配置文件: ${config.fileName}`); } } - } - console.log(`✅ 内部删除配置: ${config.name}`); + // 构建相对路径 + const relativePath = `/${aircraft.projectId}/${aircraft.name}/${container.name}/${folderName}`; - } catch (error) { - console.error(`删除配置文件失败: ${error}`); - } -} -/** - * 删除合并文件夹 - */ -private async deleteMergedFolder(folderId: string): Promise { - const folder = this.mergedFolders.find(f => f.id === folderId); - if (!folder) return; + // 创建合并文件夹记录 + const newFolder: ModuleFolder = { + id: 'merged-' + Date.now(), + name: displayName, + type: 'merged', + localPath: relativePath, + containerId: this.currentContainerId + }; - const confirm = await vscode.window.showWarningMessage( - `确定要删除合并文件夹 "${folder.displayName}" 吗?这将删除文件夹及其所有内容。`, - { modal: true }, - '确定删除', - '取消' - ); + // 添加到模块文件夹列表 + this.moduleFolders.push(newFolder); - if (confirm === '确定删除') { - try { - // 删除文件夹及其所有内容 - await fs.promises.rm(folder.path, { recursive: true, force: true }); + // 删除原始配置文件 + for (const configId of configIds) { + await this.deleteConfigInternal(configId); + } - // 从列表中移除 - this.mergedFolders = this.mergedFolders.filter(f => f.id !== folderId); + // 保存数据 await this.saveCurrentProjectData(); - vscode.window.showInformationMessage(`合并文件夹已删除: ${folder.displayName}`); + vscode.window.showInformationMessage(`成功合并 ${selectedConfigs.length} 个配置文件到文件夹: ${folderName}`); + + // 更新UI this.updateWebview(); } catch (error) { - vscode.window.showErrorMessage(`删除合并文件夹失败: ${error}`); + console.error('❌ 合并配置文件失败:', error); + vscode.window.showErrorMessage(`合并配置文件失败: ${error}`); } } -} -/** - * 在 VSCode 中打开合并文件夹 - */ -private async openMergedFolderInVSCode(folderId: string): Promise { - const folder = this.mergedFolders.find(f => f.id === folderId); - if (!folder) { - vscode.window.showErrorMessage('未找到指定的合并文件夹'); - return; + /** + * 内部删除配置文件方法(不显示确认对话框) + */ + private async deleteConfigInternal(configId: string): Promise { + try { + const config = this.configs.find(c => c.id === configId); + if (!config) return; + + // 从内存中删除配置 + this.configs = this.configs.filter(c => c.id !== configId); + + // 删除磁盘上的配置文件 + const container = this.containers.find(c => c.id === config.containerId); + if (container) { + const aircraft = this.aircrafts.find(a => a.id === container.aircraftId); + if (aircraft) { + const projectPath = this.projectPaths.get(aircraft.projectId); + if (projectPath) { + const filePath = path.join(projectPath, aircraft.name, container.name, config.fileName); + + // 检查文件是否存在,如果存在则删除 + if (fs.existsSync(filePath)) { + await fs.promises.unlink(filePath); + console.log(`✅ 已删除配置文件: ${filePath}`); + } + } + } + } + + console.log(`✅ 内部删除配置: ${config.name}`); + + } catch (error) { + console.error(`删除配置文件失败: ${error}`); + } } - try { - // 检查文件夹是否存在 - if (!fs.existsSync(folder.path)) { - vscode.window.showErrorMessage('合并文件夹不存在'); + /** + * 在 VSCode 中打开合并文件夹 + */ + private async openMergedFolderInVSCode(folderId: string): Promise { + const folder = this.moduleFolders.find(f => f.id === folderId); + if (!folder) { + vscode.window.showErrorMessage('未找到指定的模块文件夹'); return; } - // 使用 VSCode 打开文件夹 - const folderUri = vscode.Uri.file(folder.path); - vscode.commands.executeCommand('vscode.openFolder', folderUri, { forceNewWindow: false }); + try { + // 检查文件夹是否存在 + const fullPath = this.getModuleFolderFullPath(folder); + if (!fullPath || !fs.existsSync(fullPath)) { + vscode.window.showErrorMessage('模块文件夹不存在'); + return; + } - } catch (error) { - vscode.window.showErrorMessage(`打开合并文件夹失败: ${error}`); + // 使用 VSCode 打开文件夹 + const folderUri = vscode.Uri.file(fullPath); + vscode.commands.executeCommand('vscode.openFolder', folderUri, { forceNewWindow: false }); + + } catch (error) { + vscode.window.showErrorMessage(`打开模块文件夹失败: ${error}`); + } } -} /** * 统一方法:在 VSCode 中打开模块文件夹中的文件 @@ -1845,47 +1802,28 @@ private async openMergedFolderInVSCode(folderId: string): Promise { * @param id 模块 ID */ private async openTheModuleFolder(type: 'git' | 'merged', id: string): Promise { - let folderPath: string | undefined; - let folderName: string | undefined; - - if (type === 'git') { - const repo = this.gitRepos.find(r => r.id === id); - if (!repo) { - vscode.window.showErrorMessage('未找到指定的 Git 仓库'); - return; - } - folderPath = repo.localPath; - folderName = repo.name; - } else if (type === 'merged') { - const folder = this.mergedFolders.find(f => f.id === id); - if (!folder) { - vscode.window.showErrorMessage('未找到指定的合并文件夹'); - return; - } - folderPath = folder.path; - folderName = folder.displayName; - } - - if (!folderPath) { - vscode.window.showErrorMessage('未找到文件夹路径'); + const folder = this.moduleFolders.find(f => f.id === id); + if (!folder) { + vscode.window.showErrorMessage('未找到指定的模块文件夹'); return; } try { // 检查文件夹是否存在 - if (!fs.existsSync(folderPath)) { - vscode.window.showErrorMessage(`${type === 'git' ? 'Git 仓库' : '合并文件夹'}目录不存在`); + const fullPath = this.getModuleFolderFullPath(folder); + if (!fullPath || !fs.existsSync(fullPath)) { + vscode.window.showErrorMessage('模块文件夹目录不存在'); return; } // 使用 VSCode 的文件选择器让用户选择要打开的文件 const fileUri = await vscode.window.showOpenDialog({ - defaultUri: vscode.Uri.file(folderPath), + defaultUri: vscode.Uri.file(fullPath), canSelectFiles: true, canSelectFolders: false, canSelectMany: false, openLabel: '选择要打开的文件', - title: `在 ${folderName} 中选择文件` + title: `在 ${folder.name} 中选择文件` }); if (fileUri && fileUri.length > 0) { @@ -1896,7 +1834,28 @@ private async openMergedFolderInVSCode(folderId: string): Promise { } } catch (error) { - vscode.window.showErrorMessage(`打开${type === 'git' ? 'Git 仓库' : '合并文件夹'}文件失败: ${error}`); + vscode.window.showErrorMessage(`打开模块文件夹文件失败: ${error}`); } } -} + + /** + * 获取模块文件夹的完整路径 + */ + private getModuleFolderFullPath(folder: ModuleFolder): string | null { + const container = this.containers.find(c => c.id === folder.containerId); + if (!container) return null; + + const aircraft = this.aircrafts.find(a => a.id === container.aircraftId); + if (!aircraft) return null; + + const projectPath = this.projectPaths.get(aircraft.projectId); + if (!projectPath) return null; + + // 从相对路径解析出文件夹名称 + const pathParts = folder.localPath.split('/').filter(part => part); + if (pathParts.length < 4) return null; + + const folderName = pathParts[pathParts.length - 1]; + return path.join(projectPath, aircraft.name, container.name, folderName); + } +} \ No newline at end of file diff --git a/src/panels/types/DataModel.ts b/src/panels/types/DataModel.ts index aed06d7..1fe8f1b 100644 --- a/src/panels/types/DataModel.ts +++ b/src/panels/types/DataModel.ts @@ -16,6 +16,7 @@ export interface Container { name: string; aircraftId: string; configs: Config[]; + moduleFolders: ModuleFolder[]; // 新增:模块文件夹列表 } export interface Config { @@ -24,4 +25,13 @@ export interface Config { fileName: string; content: string; containerId: string; +} + +// 新增:统一的模块文件夹接口 +export interface ModuleFolder { + id: string; + name: string; + type: 'git' | 'merged'; // 类型标识 + localPath: string; // 相对路径,如 "/项目1/飞行器1/容器1/test-code" + containerId: string; } \ No newline at end of file diff --git a/src/panels/types/DataTypes.ts b/src/panels/types/DataTypes.ts new file mode 100644 index 0000000..4223881 --- /dev/null +++ b/src/panels/types/DataTypes.ts @@ -0,0 +1,45 @@ +// src/types/DataTypes.ts + +// 统一的模块文件夹接口 +export interface ModuleFolder { + id: string; + name: string; + type: 'git' | 'merged'; // 类型标识 + localPath: string; // 相对路径,如 "/项目1/飞行器1/容器1/test-code" + containerId: string; +} + +// 项目数据接口 +export interface ProjectData { + projects: Project[]; + aircrafts: Aircraft[]; + containers: Container[]; + configs: Config[]; + moduleFolders: ModuleFolder[]; // 统一的模块文件夹数据 +} + +// 基础数据接口 +export interface Project { + id: string; + name: string; +} + +export interface Aircraft { + id: string; + name: string; + projectId: string; +} + +export interface Container { + id: string; + name: string; + aircraftId: string; +} + +export interface Config { + id: string; + name: string; + fileName: string; + content: string; + containerId: string; +} \ No newline at end of file diff --git a/src/panels/types/ViewTypes.ts b/src/panels/types/ViewTypes.ts old mode 100644 new mode 100755 index 1bf139f..5283bcd --- a/src/panels/types/ViewTypes.ts +++ b/src/panels/types/ViewTypes.ts @@ -39,14 +39,13 @@ export interface ContainerConfigData { configs: ConfigViewData[]; } -// 新增 Git 相关类型 -export interface GitRepoData { +// 新增模块文件夹相关类型 +export interface ModuleFolderData { id: string; name: string; - url: string; + type: 'git' | 'merged'; localPath: string; - branch: string; - lastSync: string; + containerId: string; } export interface GitFileTree { diff --git a/src/panels/views/ConfigView.ts b/src/panels/views/ConfigView.ts index 8abacfe..e6f7eac 100755 --- a/src/panels/views/ConfigView.ts +++ b/src/panels/views/ConfigView.ts @@ -1,5 +1,6 @@ import { BaseView } from './BaseView'; import { ContainerConfigData, ConfigViewData } from '../types/ViewTypes'; +import { ModuleFolder } from '../types/DataTypes'; // Git 分支接口 interface GitBranch { @@ -26,29 +27,6 @@ interface GitFileTree { children?: GitFileTree[]; } -// Git 仓库接口 -interface GitRepo { - id: string; - name: string; - url: string; - localPath: string; - branch: string; - lastSync: string; - containerId: string; -} - -// 合并文件夹接口 -interface MergedFolder { - id: string; - displayName: string; // 配置栏显示的名称 - folderName: string; // 实际文件夹名称 - path: string; - fileCount: number; - containerId: string; - originalConfigIds: string[]; - createdAt: string; -} - // 树状分支节点接口 interface BranchTreeNode { name: string; @@ -62,25 +40,23 @@ interface BranchTreeNode { export class ConfigView extends BaseView { render(data?: ContainerConfigData & { - gitRepos?: GitRepo[]; - currentGitRepo?: GitRepo; - gitFileTree?: GitFileTree[]; - gitLoading?: boolean; + moduleFolders?: ModuleFolder[]; + currentModuleFolder?: ModuleFolder; + moduleFolderFileTree?: GitFileTree[]; + moduleFolderLoading?: boolean; gitBranches?: GitBranch[]; gitRepoUrl?: string; - mergedFolders?: MergedFolder[]; }): string { const container = data?.container; const configs = data?.configs || []; - const gitRepos = data?.gitRepos || []; - const currentGitRepo = data?.currentGitRepo; - const gitFileTree = data?.gitFileTree || []; - const gitLoading = data?.gitLoading || false; + const moduleFolders = data?.moduleFolders || []; + const currentModuleFolder = data?.currentModuleFolder; + const moduleFolderFileTree = data?.moduleFolderFileTree || []; + const moduleFolderLoading = data?.moduleFolderLoading || false; const gitBranches = data?.gitBranches || []; const gitRepoUrl = data?.gitRepoUrl || ''; - const mergedFolders = data?.mergedFolders || []; - // 生成配置列表的 HTML - 包含配置文件和 Git 仓库 + // 生成配置列表的 HTML - 包含配置文件和模块文件夹 const configsHtml = configs.map((config: ConfigViewData) => ` @@ -96,41 +72,23 @@ export class ConfigView extends BaseView { `).join(''); - // 生成合并文件夹的 HTML - 显示在配置列表中 - const mergedFoldersHtml = mergedFolders.map((folder: MergedFolder) => ` - - - 📁 ${folder.displayName} - - - ${folder.folderName} - - - - - - `).join(''); - - // 生成 Git 仓库列表的 HTML - 修改显示方式,Git 仓库不可勾选 - const gitReposHtml = gitRepos.map(repo => { - // 提取仓库名称(从URL中获取或使用name) - const repoName = repo.name.split(' (')[0]; // 移除分支名部分 - // 提取分支名 - const branchMatch = repo.name.match(/\(([^)]+)\)/); - const branchName = branchMatch ? branchMatch[1] : repo.branch; + // 生成模块文件夹的 HTML - 统一显示 Git 和合并文件夹 + const moduleFoldersHtml = moduleFolders.map((folder: ModuleFolder) => { + const icon = folder.type === 'git' ? '📁' : '📁'; return ` - 📁 ${repoName} -
-
+ ${icon} ${folder.name} - ${branchName} + ${folder.localPath.split('/').pop()} - + ${folder.type === 'git' ? ` + + ` : ''} + `; @@ -182,6 +140,19 @@ export class ConfigView extends BaseView { opacity: 0.8; } + .btn-sync { + background: var(--vscode-button-background); + color: var(--vscode-button-foreground); + padding: 4px 8px; + border: none; + border-radius: 2px; + cursor: pointer; + } + + .btn-sync:hover { + background: var(--vscode-button-hoverBackground); + } + /* 树状分支样式 */ .branch-tree { font-family: 'Courier New', monospace; @@ -323,21 +294,20 @@ export class ConfigView extends BaseView { 配置 - 文件 + 文件/文件夹 操作 ${configsHtml} - ${mergedFoldersHtml} - ${gitReposHtml} + ${moduleFoldersHtml}
- +
-

📚 Git 仓库管理

+

📚 模块云仓库

@@ -391,8 +361,7 @@ export class ConfigView extends BaseView { }); } - - // 统一功能:打开模块文件夹(合并 Git 仓库和合并文件夹功能) + // 统一功能:打开模块文件夹 function openTheModuleFolder(id, type) { console.log('📂 打开模块文件夹:', { id, type }); vscode.postMessage({ @@ -436,46 +405,34 @@ export class ConfigView extends BaseView { ); } - // 删除合并文件夹功能 - function deleteMergedFolder(folderId) { - console.log('🗑️ 尝试删除合并文件夹:', folderId); + // 删除模块文件夹功能 + function deleteModuleFolder(folderId) { + console.log('🗑️ 尝试删除模块文件夹:', folderId); showConfirmDialog( - '确认删除合并文件夹', - '确定删除这个合并文件夹吗?这将删除文件夹及其所有内容。', + '确认删除模块文件夹', + '确定删除这个模块文件夹吗?这将删除文件夹及其所有内容。', function() { - console.log('✅ 用户确认删除合并文件夹:', folderId); + console.log('✅ 用户确认删除模块文件夹:', folderId); vscode.postMessage({ - type: 'deleteMergedFolder', + type: 'deleteModuleFolder', folderId: folderId }); }, function() { // 用户取消删除 - console.log('❌ 用户取消删除合并文件夹'); + console.log('❌ 用户取消删除模块文件夹'); } ); } - // Git 仓库删除功能 - function deleteGitRepo(repoId) { - console.log('🗑️ 尝试删除 Git 仓库:', repoId); - - showConfirmDialog( - '确认删除 Git 仓库', - '确定删除这个 Git 仓库吗?这将删除本地克隆的代码文件夹。', - function() { - console.log('✅ 用户确认删除 Git 仓库:', repoId); - vscode.postMessage({ - type: 'deleteGitRepo', - repoId: repoId - }); - }, - function() { - // 用户取消删除 - console.log('❌ 用户取消删除 Git 仓库'); - } - ); + // 同步 Git 模块文件夹 + function syncModuleFolder(folderId) { + console.log('🔄 同步模块文件夹:', folderId); + vscode.postMessage({ + type: 'syncGitModuleFolder', + folderId: folderId + }); } function goBackToContainers() { @@ -552,14 +509,6 @@ export class ConfigView extends BaseView { }); } - function syncGitRepo(repoId) { - console.log('🔄 同步仓库:', repoId); - vscode.postMessage({ - type: 'syncGitRepo', - repoId: repoId - }); - } - // 配置文件合并功能 function toggleConfigSelection(configId) { const checkbox = document.querySelector('.config-checkbox[data-id="' + configId + '"]');