UNPKG

@re-shell/cli

Version:

Full-stack development platform uniting microservices and microfrontends. Build complete applications with .NET (ASP.NET Core Web API, Minimal API), Java (Spring Boot, Quarkus, Micronaut, Vert.x), Rust (Actix-Web, Warp, Rocket, Axum), Python (FastAPI, Dja

177 lines (176 loc) 4.68 kB
import { Command } from 'commander'; import { EventEmitter } from 'events'; import { PluginHookAPI } from '../utils/plugin-hooks'; export interface CommandDefinition { name: string; description: string; alias?: string[]; options?: CommandOption[]; arguments?: CommandArgument[]; examples?: CommandExample[]; keywords?: string[]; category?: string; priority?: number; hidden?: boolean; experimental?: boolean; middleware?: CommandMiddleware[]; handler: CommandHandler; plugin?: { name: string; version: string; }; } export interface CommandOption { flag: string; description: string; defaultValue?: any; required?: boolean; choices?: string[]; validator?: (value: any) => boolean | Promise<boolean>; transformer?: (value: any) => any; } export interface CommandArgument { name: string; description: string; required?: boolean; variadic?: boolean; defaultValue?: any; validator?: (value: any) => boolean | Promise<boolean>; transformer?: (value: any) => any; } export interface CommandExample { description: string; command: string; } export interface CommandContext { command: CommandDefinition; args: Record<string, any>; options: Record<string, any>; program: Command; logger: Logger; spinner: Spinner; analytics: Analytics; config: ConfigManager; plugins: PluginHookAPI; } export interface CommandMiddleware { name: string; phase: 'pre' | 'post'; handler: (context: CommandContext) => Promise<void> | void; } export type CommandHandler = (context: CommandContext) => Promise<void> | void; export interface Logger { debug(message: string, ...args: any[]): void; info(message: string, ...args: any[]): void; warn(message: string, ...args: any[]): void; error(message: string, ...args: any[]): void; success(message: string, ...args: any[]): void; } export interface Spinner { start(message: string): void; succeed(message?: string): void; fail(message?: string): void; info(message?: string): void; warn(message?: string): void; stop(): void; isSpinning: boolean; } export interface Analytics { track(event: string, properties?: Record<string, any>): void; timeStart(label: string): void; timeEnd(label: string): void; increment(metric: string, value?: number): void; } export interface ConfigManager { get<T = any>(key: string, defaultValue?: T): T; set(key: string, value: any): void; has(key: string): boolean; delete(key: string): void; getAll(): Record<string, any>; } export declare class CommandRegistry extends EventEmitter { private logger; private analytics; private config; private plugins; private commands; private aliases; private categories; private middleware; private commandHistory; constructor(logger: Logger, analytics: Analytics, config: ConfigManager, plugins: PluginHookAPI); /** * Register a new command */ register(definition: CommandDefinition): Promise<void>; /** * Unregister a command */ unregister(name: string): Promise<void>; /** * Get a command by name or alias */ get(nameOrAlias: string): CommandDefinition | undefined; /** * Get all commands */ getAll(): CommandDefinition[]; /** * Get commands by category */ getByCategory(category: string): CommandDefinition[]; /** * Get all categories */ getCategories(): string[]; /** * Add global middleware */ addMiddleware(middleware: CommandMiddleware): void; /** * Create commander command from definition */ createCommand(program: Command, definition: CommandDefinition): Command; /** * Execute command with middleware */ private executeCommand; /** * Run middleware for a phase */ private runMiddleware; /** * Create command context */ private createContext; /** * Create spinner instance */ private createSpinner; /** * Validate command definition */ private validateCommand; /** * Get command history */ getHistory(): CommandExecution[]; /** * Clear command history */ clearHistory(): void; /** * Search commands */ search(query: string): CommandDefinition[]; } interface CommandExecution { command: string; args: Record<string, any>; options: Record<string, any>; startTime: number; endTime?: number; status: 'running' | 'success' | 'error'; error?: any; } export {};