Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

附录 D:配置参考

本附录列出 VSDB 的配置文件和选项。

D.1 连接存储位置

项目级连接

.vsdb/connections.json

示例内容:

{
  "connections": [
    {
      "id": "uuid-1",
      "name": "dev-mysql",
      "type": "mysql",
      "host": "localhost",
      "port": 3306,
      "username": "root",
      "database": "myapp",
      "scope": "project",
      "group": "development",
      "color": "blue"
    }
  ]
}

全局连接

~/.vsdb/connections.json

格式与项目级相同,scope"global"

密码存储

密码通过 VSCode SecretStorage API 加密存储,键名格式:

vsdb.password.{connectionId}

D.2 IpcManager 配置

interface IpcManagerOptions {
  workerScriptPath: string;         // Worker 脚本路径(必填)
  restartOnCrash?: boolean;         // 崩溃时重启(默认 true)
  maxRestartAttempts?: number;      // 最大重启次数(默认 3)
  requestTimeout?: number;          // 请求超时(默认 60000ms)
  heartbeatInterval?: number;       // 心跳间隔(默认 15000ms)
  heartbeatTimeout?: number;        // 心跳超时(默认 30000ms)
  streamChunkTimeout?: number;      // 分块超时(默认 30000ms)
  gracefulShutdownTimeout?: number; // 关闭超时(默认 10000ms)
  callbacks?: IpcManagerCallbacks;  // 事件回调
}

默认值:

const DEFAULT_REQUEST_TIMEOUT = 60000;      // 60 秒
const DEFAULT_MAX_RESTART_ATTEMPTS = 3;
const DEFAULT_HEARTBEAT_INTERVAL = 15000;   // 15 秒
const DEFAULT_HEARTBEAT_TIMEOUT = 30000;    // 30 秒
const DEFAULT_STREAM_CHUNK_TIMEOUT = 30000; // 30 秒
const DEFAULT_GRACEFUL_SHUTDOWN_TIMEOUT = 10000; // 10 秒

D.3 QueryQueue 配置

interface QueryQueueOptions {
  maxConcurrency?: number;      // 最大并发(默认 5)
  defaultTimeout?: number;      // 默认超时(默认 30000ms)
}

D.4 连接选项

DbConnection 的 options 字段支持:

MySQL 选项

{
  charset?: string;             // 字符集(如 'utf8mb4')
  timezone?: string;            // 时区(如 '+08:00'')
  ssl?: {                       // SSL 配置
    rejectUnauthorized?: boolean;
    ca?: string;
    cert?: string;
    key?: string;
  };
  multipleStatements?: boolean; // 多语句支持(默认 false)
}

PostgreSQL 选项

{
  ssl?: boolean | {             // SSL 配置
    rejectUnauthorized?: boolean;
    ca?: string;
    cert?: string;
    key?: string;
  };
  applicationName?: string;     // 应用名
  connectionTimeoutMillis?: number; // 连接超时
  idleTimeoutMillis?: number;   // 空闲超时
}

D.5 扫描配置

EnvParser

const ENV_FILE_PATTERNS = [
  '.env',
  '.env.local',
  '.env.development',
  '.env.production',
  '.env.test',
  '.env.staging',
];

const MAX_DEPTH = 3;  // 最大搜索深度

解析的环境变量:

变量类型说明
DATABASE_URLPostgreSQL/MySQL URL完整连接字符串
DB_URLPostgreSQL/MySQL URL同 DATABASE_URL
DB_HOSTHost需配合 DB_PORT 等
DB_PORTPort默认 PostgreSQL
DB_USERUsername-
DB_PASSWORDPassword-
DB_NAMEDatabase-
MYSQL_HOSTHost (MySQL)-
MYSQL_PORTPort (MySQL)默认 3306
MYSQL_USERUsername-
MYSQL_PASSWORDPassword-
MYSQL_DATABASEDatabase-
PG_HOSTHost (PostgreSQL)-
PG_PORTPort (PostgreSQL)默认 5432
PG_USERUsername-
PG_PASSWORDPassword-
PG_DATABASEDatabase-

DockerComposeParser

识别的镜像:

  • 包含 mysqlmariadb → MySQL
  • 包含 postgrespostgresql → PostgreSQL

解析的环境变量:

变量类型说明
MYSQL_ROOT_PASSWORDPasswordMySQL root 密码
MYSQL_USERUsernameMySQL 用户
MYSQL_PASSWORDPasswordMySQL 用户密码
MYSQL_DATABASEDatabaseMySQL 数据库
POSTGRES_USERUsernamePostgreSQL 用户
POSTGRES_PASSWORDPasswordPostgreSQL 密码
POSTGRES_DBDatabasePostgreSQL 数据库

D.6 HistoryManager 配置

const maxItems = 100;  // 最大历史记录数

清理策略:

  • 超过上限时优先清理未固定项
  • 全部固定时清理最旧的固定项

D.7 SearchEngine 配置

const cacheTimeout = 60000;  // Schema 缓存时间(1 分钟)

搜索选项默认值:

选项默认值
searchTablestrue
searchColumnstrue
searchDatafalse(较慢)
caseSensitivefalse

D.8 扩展 manifest 配置

// package.json
{
  "name": "vsdb",
  "displayName": "VSDB - Database Client",
  "version": "0.1.0",
  "engines": {
    "vscode": "^1.85.0"
  },
  "categories": ["Database", "Other"],
  "activationEvents": ["onView:vsdb.connections"],
  "main": "./dist/extension.js"
}

D.9 TypeScript 配置

// tsconfig.json
{
  "compilerOptions": {
    "module": "commonjs",
    "target": "ES2020",
    "outDir": "./dist",
    "rootDir": "./src",
    "sourceMap": true,
    "strict": true,
    "esModuleInterop": true,
    "skipLibCheck": true
  }
}

D.10 Vitest 配置

// vitest.config.ts
export default defineConfig({
  test: {
    globals: true,
    environment: 'node',
    coverage: {
      provider: 'v8',
      threshold: {
        lines: 80,
        functions: 80,
        branches: 80,
      },
    },
  },
});