UNPKG

@pulzar/core

Version:

Next-generation Node.js framework for ultra-fast web applications with zero-reflection DI, GraphQL, WebSockets, events, and edge runtime support

160 lines 4.57 kB
import type { FastifyInstance } from "fastify"; import type { Command } from "commander"; import { EventEmitter } from "events"; export interface PluginContext { app: FastifyInstance; config: any; env: Record<string, string>; isDevelopment: boolean; isProduction: boolean; } export interface PluginHooks { /** * Called when configuring the Fastify server */ configureServer?(app: FastifyInstance, context: PluginContext): Promise<void> | void; /** * Called when configuring CLI commands */ configureCLI?(program: Command, context: PluginContext): Promise<void> | void; /** * Called after build is complete */ buildEnd?(context: PluginContext): Promise<void> | void; /** * Called when setting up GraphQL */ configureGraphQL?(schema: any, context: PluginContext): Promise<void> | void; /** * Called when setting up task scheduler */ configureTaskScheduler?(scheduler: any, context: PluginContext): Promise<void> | void; /** * Called when setting up WebSocket gateway */ configureWebSocket?(gateway: any, context: PluginContext): Promise<void> | void; /** * Called during dependency injection setup */ configureDI?(container: any, context: PluginContext): Promise<void> | void; /** * Called when setting up OpenAPI */ configureOpenAPI?(generator: any, context: PluginContext): Promise<void> | void; /** * Called before server starts */ beforeStart?(context: PluginContext): Promise<void> | void; /** * Called after server starts */ afterStart?(context: PluginContext): Promise<void> | void; /** * Called when server is shutting down */ beforeStop?(context: PluginContext): Promise<void> | void; } export interface IgnitePlugin extends PluginHooks { name: string; version?: string; description?: string; dependencies?: string[]; optionalDependencies?: string[]; /** * Plugin setup function */ setup?(context: PluginContext): Promise<void> | void; /** * Plugin teardown function */ teardown?(context: PluginContext): Promise<void> | void; } export type PluginFactory = (options?: any) => IgnitePlugin; export interface PluginManagerOptions { plugins: (IgnitePlugin | PluginFactory)[]; enableHotReload?: boolean; validateDependencies?: boolean; } export declare class PluginManager extends EventEmitter { private plugins; private context; private initialized; private options; constructor(context: PluginContext, options: PluginManagerOptions); /** * Initialize all plugins */ initialize(): Promise<void>; /** * Load a single plugin */ loadPlugin(pluginOrFactory: IgnitePlugin | PluginFactory): Promise<void>; /** * Setup a plugin */ private setupPlugin; /** * Call a specific hook on all plugins */ callHook<K extends keyof PluginHooks>(hookName: K, ...args: Parameters<NonNullable<PluginHooks[K]>>): Promise<void>; /** * Get a plugin by name */ getPlugin(name: string): IgnitePlugin | undefined; /** * Get all loaded plugins */ getPlugins(): IgnitePlugin[]; /** * Check if a plugin is loaded */ hasPlugin(name: string): boolean; /** * Validate plugin dependencies */ private validatePluginDependencies; /** * Sort plugins by dependencies using topological sort */ private sortPluginsByDependencies; /** * Shutdown all plugins */ shutdown(): Promise<void>; /** * Reload a plugin (for hot reload) */ reloadPlugin(name: string): Promise<void>; } /** * Create a plugin context */ export declare function createPluginContext(app: FastifyInstance, config: any): PluginContext; /** * Plugin factory helper */ export declare function definePlugin(plugin: IgnitePlugin): IgnitePlugin; export declare function definePlugin(factory: PluginFactory): PluginFactory; /** * Create a plugin with options */ export declare function createPlugin<T = any>(name: string, factory: (options?: T) => IgnitePlugin): PluginFactory; /** * Built-in plugins */ export declare const builtinPlugins: { /** * Development tools plugin */ devtools: PluginFactory; /** * Metrics plugin */ metrics: PluginFactory; /** * Health check plugin */ health: PluginFactory; }; export default PluginManager; //# sourceMappingURL=plugin-manager.d.ts.map