UNPKG

bb-inspired

Version:

Core library for BB-inspired NestJS backend

50 lines (49 loc) 1.65 kB
import { Type } from '@nestjs/common'; import { ModuleContext } from './module.interfaces'; export interface PluginMetadata { name: string; version: string; description?: string; author?: string; dependencies?: string[]; targetModules?: string[]; priority?: number; tags?: string[]; } export interface PluginLifecycle { onLoad?(context: ModuleContext): Promise<void> | void; onEnable?(context: ModuleContext): Promise<void> | void; onDisable?(context: ModuleContext): Promise<void> | void; onBootstrap?(context: ModuleContext): Promise<void> | void; onShutdown?(context: ModuleContext): Promise<void> | void; } export interface HookPoint { name: string; description?: string; module: string; priority?: number; } export interface HookHandler<T = any, R = any> { (data: T, context: ModuleContext): Promise<R> | R; } export interface HookResult<R = any> { result?: R; break?: boolean; } export interface PluginRegistrationOptions { metadata: PluginMetadata; lifecycle?: PluginLifecycle; hooks?: Record<string, HookHandler>; providers?: Type<any>[]; config?: Record<string, any>; } export interface PluginManager { register(plugin: PluginRegistrationOptions): Promise<void>; enable(pluginName: string): Promise<boolean>; disable(pluginName: string): Promise<boolean>; getPlugins(): PluginMetadata[]; getPlugin(name: string): PluginMetadata | undefined; isEnabled(name: string): boolean; registerHook(hookName: string, handler: HookHandler): void; executeHook<T = any, R = any>(hookName: string, data: T): Promise<R[]>; }