mira-app-server
Version:
Mira Server - standalone server application using mira-app-core
133 lines • 4.51 kB
JavaScript
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.ServerPlugin = void 0;
const fs = __importStar(require("fs"));
const path = __importStar(require("path"));
class ServerPlugin {
constructor(pluginName, pluginManager, dbServer) {
this.pluginName = pluginName;
this.configs = {};
this.routes = [];
this.pluginDir = pluginManager.getPluginDir(pluginName);
this.pluginDataDir = path.join(this.pluginDir, 'data');
this.ensureDirExists();
}
ensureDirExists() {
if (!fs.existsSync(this.pluginDataDir)) {
fs.mkdirSync(this.pluginDataDir, { recursive: true });
}
}
writeConfig(key, value) {
this.configs[key] = value;
this.saveConfig();
}
saveConfig() {
return this.writeJson('config.json', this.configs);
}
readConfig(key) {
return this.configs[key];
}
loadConfig(defaultConfig = {}) {
const config = this.readJson('config.json');
this.configs = { ...defaultConfig, ...config || {} };
if (config == null) {
this.saveConfig();
}
}
writeJson(filename, data) {
const filePath = path.join(this.pluginDataDir, filename);
fs.writeFileSync(filePath, JSON.stringify(data, null, 2));
}
readJson(filename) {
const filePath = path.join(this.pluginDataDir, filename);
if (fs.existsSync(filePath)) {
return JSON.parse(fs.readFileSync(filePath, 'utf-8'));
}
return null;
}
/**
* 注册插件路由
* @param route 路由定义
*/
registerRoute(route) {
// 确保路径是唯一的
const existingRoute = this.routes.find(r => r.path === route.path);
if (existingRoute) {
console.warn(`Plugin ${this.pluginName}: Route path ${route.path} already exists, overwriting...`);
const index = this.routes.indexOf(existingRoute);
this.routes[index] = route;
}
else {
this.routes.push(route);
}
console.log(`Plugin ${this.pluginName}: Registered route ${route.path}`);
}
/**
* 批量注册路由
* @param routes 路由定义数组
*/
registerRoutes(routes) {
routes.forEach(route => this.registerRoute(route));
}
/**
* 获取插件注册的所有路由
*/
getRoutes() {
return [...this.routes]; // 返回副本避免外部修改
}
/**
* 移除指定路径的路由
* @param path 路由路径
*/
unregisterRoute(path) {
const index = this.routes.findIndex(r => r.path === path);
if (index !== -1) {
this.routes.splice(index, 1);
console.log(`Plugin ${this.pluginName}: Unregistered route ${path}`);
return true;
}
return false;
}
/**
* 清空所有注册的路由
*/
clearRoutes() {
this.routes = [];
console.log(`Plugin ${this.pluginName}: Cleared all routes`);
}
}
exports.ServerPlugin = ServerPlugin;
//# sourceMappingURL=ServerPlugin.js.map