bugfix:修复配置文件不符合要求导致整个插件崩溃的bug

This commit is contained in:
li1553770945 2025-06-03 21:24:50 +08:00
parent 46115bcfba
commit fe2a7c68cb
2 changed files with 23 additions and 10 deletions

View File

@ -9,6 +9,7 @@ interface Entity {
} }
const dbConnections: Record<string, any> = {}; const dbConnections: Record<string, any> = {};
const DatastoreCtor = Datastore as unknown as { new(options: any): any };
export class LocalDB<T extends Entity> { export class LocalDB<T extends Entity> {
private db: any; private db: any;
@ -28,7 +29,7 @@ export class LocalDB<T extends Entity> {
const filename = path.join(dbPath, `${this.tableName}.db`); const filename = path.join(dbPath, `${this.tableName}.db`);
if (!dbConnections[filename]) { if (!dbConnections[filename]) {
dbConnections[filename] = new Datastore.default({ dbConnections[filename] = new DatastoreCtor({
filename, filename,
autoload: true, autoload: true,
timestampData: true timestampData: true

View File

@ -16,25 +16,37 @@ export class McpWorkspaceConnectProvider implements vscode.TreeDataProvider<Conn
getTreeItem(element: ConnectionViewItem): vscode.TreeItem { getTreeItem(element: ConnectionViewItem): vscode.TreeItem {
return element; return element;
} }
getChildren(element?: ConnectionViewItem): Thenable<ConnectionViewItem[]> { getChildren(element?: ConnectionViewItem): Thenable<ConnectionViewItem[]> {
// TODO: 读取 configDir 下的所有文件,作为子节点 // TODO: 读取 configDir 下的所有文件,作为子节点
const connection = getWorkspaceConnectionConfig(); const connection = getWorkspaceConnectionConfig();
const sidebarItems = connection.items.map((item, index) => {
// 连接的名字 // 校验 connection 和 connection.items
const nItem = Array.isArray(item) ? item[0] : item; if (!connection || !Array.isArray(connection.items)) {
const itemName = `${nItem.name} (${nItem.type || nItem.connectionType})` return Promise.resolve([]);
return new ConnectionViewItem(itemName, vscode.TreeItemCollapsibleState.None, item, 'server'); }
})
const sidebarItems = connection.items
.filter(item => item !== null && item !== undefined)
.map((item, index) => {
// 连接的名字
const nItem = Array.isArray(item) ? item[0] : item;
if (!nItem || typeof nItem !== 'object') {
return null;
}
const name = nItem.name || '未命名';
const type = nItem.type || nItem.connectionType || '未知类型';
const itemName = `${name} (${type})`;
return new ConnectionViewItem(itemName, vscode.TreeItemCollapsibleState.None, item, 'server');
})
.filter(Boolean) as ConnectionViewItem[]; // 过滤掉为 null 的项
// 返回子节点 // 返回子节点
return Promise.resolve(sidebarItems); return Promise.resolve(sidebarItems);
} }
@RegisterCommand('revealWebviewPanel') @RegisterCommand('revealWebviewPanel')
public revealWebviewPanel(context: vscode.ExtensionContext, view: ConnectionViewItem) { public revealWebviewPanel(context: vscode.ExtensionContext, view: ConnectionViewItem) {
const item = view.item; const item = view.item;
const masterNode = Array.isArray(item)? item[0] : item; const masterNode = Array.isArray(item) ? item[0] : item;
const name = masterNode.filePath || masterNode.name || ''; const name = masterNode.filePath || masterNode.name || '';
revealOpenMcpWebviewPanel(context, 'workspace', name, item); revealOpenMcpWebviewPanel(context, 'workspace', name, item);
} }