/** * 标准存储插件实现 * 注册内置的存储适配器类型 */ import { StoragePlugin, StoragePluginMetadata } from '../../interfaces/StoragePlugin'; import { StorageAdapter } from '../../interfaces/StorageAdapter'; import { MemoryStorageAdapter } from '../../adapters/storage/MemoryStorageAdapter'; import { FileSystemStorageAdapter } from '../../adapters/storage/FileSystemStorageAdapter'; import { StorageFactory } from '../../adapters/StorageFactory'; /** * 标准存储插件元数据 */ // 存储适配器创建器接口类型 interface StorageAdapterCreator { create(): StorageAdapter; } /** * 标准存储插件类 */ export class StandardStoragePlugin implements StoragePlugin { /** * 插件元数据 */ public metadata: StoragePluginMetadata = { name: 'standard-storage', version: '1.0.0', description: '内置存储适配器插件,提供内存存储和文件系统存储功能', author: 'System', storageType: 'standard' }; /** * 初始化插件 */ public initialize(): void { try { // 注册内存存储适配器 StorageFactory.registerAdapter('memory', { create: () => new MemoryStorageAdapter() as unknown as StorageAdapter }); // 注册文件系统存储适配器(两个别名) StorageFactory.registerAdapter('file', { create: () => new FileSystemStorageAdapter() as unknown as StorageAdapter }); StorageFactory.registerAdapter('filesystem', { create: () => new FileSystemStorageAdapter() as unknown as StorageAdapter }); } catch (error) { console.error('Failed to initialize StandardStoragePlugin:', error); throw error; } } /** * 创建存储适配器实例 * @returns 存储适配器实例 */ public createAdapter(): StorageAdapter { // 默认创建内存存储适配器 return new MemoryStorageAdapter() as unknown as StorageAdapter; } /** * 注册插件到存储工厂 * @param factory 存储工厂实例 */ public register(factory: StorageFactory): void { this.initialize(); } /** * 验证存储配置是否有效 * @param config 存储配置 * @returns 是否有效以及错误信息 */ public validateConfig(config: any): { isValid: boolean; error?: string } { if (!config || !config.type) { return { isValid: false, error: 'Storage type is required in config' }; } const validTypes = ['memory', 'file', 'filesystem']; if (!validTypes.includes(config.type)) { return { isValid: false, error: `Unsupported storage type: ${config.type}` }; } return { isValid: true }; } } /** * 插件导出 */ export default StandardStoragePlugin;