UNPKG

env-manage-plugin

Version:

A dev env plugin that integrates an Express server with request proxying capabilities.

96 lines (95 loc) 2.71 kB
import loki from "lokijs"; import { logger } from "../utils/logger.js"; // 声明数据库实例类型(避免全局变量类型模糊) let db = null; /** * 数据库初始化配置(可抽离为外部配置文件) */ const DB_CONFIG = { filename: ".envm.data.json", autosave: true, autosaveInterval: 5000, // 注意:5秒,需统一 autoload: true, }; /** * 初始化开发环境集合 */ const initEnvmsCollection = (db) => { if (!db.getCollection("envms")) { db.addCollection("envms", { indices: ["apiBaseUrl", "id"], unique: ["apiBaseUrl"], }); } }; /** * 初始化开发服务器集合 */ const initDevServerCollection = (db) => { if (!db.getCollection("devServer")) { db.addCollection("devServer", { indices: ["id", "devServerUrl"], unique: ["devServerUrl"], }); } }; /** * 初始化路由规则集合 */ const initRouteRulesCollection = (db) => { if (!db.getCollection("routeRules")) { db.addCollection("routeRules", { indices: ["id", "envId", "pathPrefix"], }); } }; /** * 初始化密码集合 */ const initPasswordsCollection = (db) => { if (!db.getCollection("passwords")) { db.addCollection("passwords", { indices: ["id", "envId", "isDefault"], }); } }; /** * 手动启动数据库(核心函数) * @returns 数据库实例(确保单例) */ export const startDatabase = () => { // 1. 单例保护:避免重复创建实例 if (db) return Promise.resolve(db); // 2. 返回Promise,支持异步等待和错误捕获 return new Promise((resolve, reject) => { // 3. 初始化数据库 const newDb = new loki(DB_CONFIG.filename, { ...DB_CONFIG, // 4. 加载回调中处理集合初始化 autoloadCallback: (err) => { if (err) { reject(new Error(`数据库加载失败: ${err.message}`)); return; } // 初始化集合 initEnvmsCollection(newDb); initDevServerCollection(newDb); initRouteRulesCollection(newDb); initPasswordsCollection(newDb); // 5. 赋值单例并返回 db = newDb; logger.info("数据库已加载/初始化"); resolve(newDb); }, }); }); }; /** * 获取数据库实例(需在startDatabase后调用) */ export const getDatabase = () => { if (!db) throw new Error("数据库未启动,请先调用 startDatabase()"); return db; };