bb-inspired
Version:
Core library for BB-inspired NestJS backend
50 lines (49 loc) • 1.65 kB
TypeScript
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[]>;
}