@api-buddy/plugin-utils
Version:
Shared utilities for API Buddy plugins
1 lines • 5.57 kB
Source Map (JSON)
{"version":3,"sources":["../src/index.ts","../src/plugin-manager.ts"],"sourcesContent":["// Export the plugin manager\nexport * from './plugin-manager.js';\n\n// Re-export types for convenience\nexport type {\n Plugin,\n PluginContext,\n PluginHook,\n Logger\n} from '@api-buddy/types';\n\n// Export plugin manager options\nexport type { PluginManagerOptions } from './plugin-manager.js';\n","import type { \n Plugin, \n PluginContext, \n PluginHook, \n Logger \n} from '@api-buddy/types';\n\nexport interface PluginManagerOptions {\n cwd?: string;\n logger?: Partial<Logger>;\n pluginsDir?: string | string[];\n nodeModulesDirs?: string[];\n}\n\n/**\n * A simple plugin manager that handles loading and managing plugins.\n * Can be extended to add custom plugin functionality.\n */\nexport class SimplePluginManager {\n protected plugins: Map<string, Plugin> = new Map();\n protected context: PluginContext;\n protected options: {\n pluginsDir: string[];\n nodeModulesDirs: string[];\n };\n\n private defaultLogger: Logger = {\n info: console.log,\n warn: console.warn,\n error: console.error,\n debug: console.debug,\n };\n\n constructor(options: PluginManagerOptions = {}) {\n this.options = {\n pluginsDir: Array.isArray(options.pluginsDir) \n ? options.pluginsDir \n : options.pluginsDir \n ? [options.pluginsDir] \n : [],\n nodeModulesDirs: options.nodeModulesDirs || [],\n };\n\n this.context = {\n cwd: options.cwd || process.cwd(),\n logger: { ...this.defaultLogger, ...(options.logger || {}) },\n config: {},\n data: new Map(),\n utils: {\n registerHook: () => {},\n unregisterHook: () => {},\n callHook: async () => undefined,\n },\n };\n }\n\n /**\n * Register a plugin\n */\n async registerPlugin(plugin: Plugin): Promise<void> {\n if (this.plugins.has(plugin.name)) {\n throw new Error(`Plugin with name '${plugin.name}' is already registered`);\n }\n\n try {\n // Initialize the plugin if it has an initialize method\n if (typeof plugin.initialize === 'function') {\n await plugin.initialize(this.context);\n }\n \n this.plugins.set(plugin.name, plugin);\n this.context.logger.info(`Registered plugin: ${plugin.name}@${plugin.version}`);\n } catch (error) {\n this.context.logger.error(`Failed to initialize plugin ${plugin.name}:`, error);\n throw error;\n }\n }\n\n /**\n * Get a registered plugin by name\n */\n getPlugin<T extends Plugin = Plugin>(name: string): T | undefined {\n return this.plugins.get(name) as T | undefined;\n }\n\n /**\n * Get all registered plugins\n */\n getPlugins(): Plugin[] {\n return Array.from(this.plugins.values());\n }\n\n /**\n * Check if a plugin is registered\n */\n hasPlugin(name: string): boolean {\n return this.plugins.has(name);\n }\n\n /**\n * Unregister a plugin\n */\n async unregisterPlugin(name: string): Promise<boolean> {\n const plugin = this.plugins.get(name);\n if (!plugin) return false;\n\n try {\n // Clean up the plugin if it has a cleanup method\n if (typeof plugin.cleanup === 'function') {\n await plugin.cleanup(this.context);\n }\n \n this.plugins.delete(name);\n this.context.logger.info(`Unregistered plugin: ${name}`);\n return true;\n } catch (error) {\n this.context.logger.error(`Failed to cleanup plugin ${name}:`, error);\n return false;\n }\n }\n\n /**\n * Load plugins from the specified directories\n */\n async loadPlugins(): Promise<void> {\n // Implementation for loading plugins from directories\n // This is a simplified version - in a real implementation, you would:\n // 1. Scan the plugin directories for plugin modules\n // 2. Import and initialize each plugin\n // 3. Register them with the plugin manager\n \n this.context.logger.info('Loading plugins...');\n // Actual implementation would go here\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACkBM,IAAO,sBAAP,MAA0B;EAe9B,YAAY,UAAgC,CAAA,GAAE;AAdpC,SAAA,UAA+B,oBAAI,IAAG;AAOxC,SAAA,gBAAwB;MAC9B,MAAM,QAAQ;MACd,MAAM,QAAQ;MACd,OAAO,QAAQ;MACf,OAAO,QAAQ;;AAIf,SAAK,UAAU;MACb,YAAY,MAAM,QAAQ,QAAQ,UAAU,IACxC,QAAQ,aACR,QAAQ,aACN,CAAC,QAAQ,UAAU,IACnB,CAAA;MACN,iBAAiB,QAAQ,mBAAmB,CAAA;;AAG9C,SAAK,UAAU;MACb,KAAK,QAAQ,OAAO,QAAQ,IAAG;MAC/B,QAAQ,EAAE,GAAG,KAAK,eAAe,GAAI,QAAQ,UAAU,CAAA,EAAG;MAC1D,QAAQ,CAAA;MACR,MAAM,oBAAI,IAAG;MACb,OAAO;QACL,cAAc,MAAK;QAAE;QACrB,gBAAgB,MAAK;QAAE;QACvB,UAAU,YAAY;;;EAG5B;;;;EAKA,MAAM,eAAe,QAAc;AACjC,QAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,GAAG;AACjC,YAAM,IAAI,MAAM,qBAAqB,OAAO,IAAI,yBAAyB;IAC3E;AAEA,QAAI;AAEF,UAAI,OAAO,OAAO,eAAe,YAAY;AAC3C,cAAM,OAAO,WAAW,KAAK,OAAO;MACtC;AAEA,WAAK,QAAQ,IAAI,OAAO,MAAM,MAAM;AACpC,WAAK,QAAQ,OAAO,KAAK,sBAAsB,OAAO,IAAI,IAAI,OAAO,OAAO,EAAE;IAChF,SAAS,OAAO;AACd,WAAK,QAAQ,OAAO,MAAM,+BAA+B,OAAO,IAAI,KAAK,KAAK;AAC9E,YAAM;IACR;EACF;;;;EAKA,UAAqC,MAAY;AAC/C,WAAO,KAAK,QAAQ,IAAI,IAAI;EAC9B;;;;EAKA,aAAU;AACR,WAAO,MAAM,KAAK,KAAK,QAAQ,OAAM,CAAE;EACzC;;;;EAKA,UAAU,MAAY;AACpB,WAAO,KAAK,QAAQ,IAAI,IAAI;EAC9B;;;;EAKA,MAAM,iBAAiB,MAAY;AACjC,UAAM,SAAS,KAAK,QAAQ,IAAI,IAAI;AACpC,QAAI,CAAC;AAAQ,aAAO;AAEpB,QAAI;AAEF,UAAI,OAAO,OAAO,YAAY,YAAY;AACxC,cAAM,OAAO,QAAQ,KAAK,OAAO;MACnC;AAEA,WAAK,QAAQ,OAAO,IAAI;AACxB,WAAK,QAAQ,OAAO,KAAK,wBAAwB,IAAI,EAAE;AACvD,aAAO;IACT,SAAS,OAAO;AACd,WAAK,QAAQ,OAAO,MAAM,4BAA4B,IAAI,KAAK,KAAK;AACpE,aAAO;IACT;EACF;;;;EAKA,MAAM,cAAW;AAOf,SAAK,QAAQ,OAAO,KAAK,oBAAoB;EAE/C;;","names":[]}