UNPKG

reloaderoo

Version:

Hot-reload your MCP servers without restarting your AI coding assistant. Works excellently with VSCode MCP, well with Claude Code. A transparent development proxy for the Model Context Protocol that enables seamless server restarts during development.

103 lines 2.92 kB
/** * Output formatting utilities for CLI mode * * Provides consistent JSON formatting and error handling for CLI output */ import { logger } from '../mcp-logger.js'; export class OutputFormatter { /** * Format successful result */ static success(data, metadata) { const result = { success: true, data, metadata: metadata || undefined }; return JSON.stringify(result, null, 2); } /** * Format error result */ static error(error, metadata) { let errorInfo; if (error instanceof Error) { errorInfo = { code: error.name || 'ERROR', message: error.message, details: error.stack }; } else { errorInfo = { code: 'UNKNOWN_ERROR', message: String(error), details: error }; } const result = { success: false, error: errorInfo, metadata: metadata || undefined }; return JSON.stringify(result, null, 2); } /** * Format raw output (for compatibility mode) */ static raw(data) { return JSON.stringify(data, null, 2); } /** * Output to stdout */ static output(data) { process.stdout.write(data); process.stdout.write('\n'); } /** * Output error to stderr and set exit code */ static outputError(error, exitCode = 1) { const formatted = OutputFormatter.error(error); process.stderr.write(formatted); process.stderr.write('\n'); process.exit(exitCode); } /** * Create metadata for a command */ static createMetadata(command, startTime) { const metadata = { command, timestamp: new Date().toISOString() }; if (startTime) { metadata.duration = Date.now() - startTime; } return metadata; } /** * Execute operation with timing and error handling */ static async executeWithTiming(command, operation, rawOutput = false) { const startTime = Date.now(); try { const result = await operation(); const metadata = OutputFormatter.createMetadata(command, startTime); if (rawOutput) { OutputFormatter.output(OutputFormatter.raw(result)); } else { OutputFormatter.output(OutputFormatter.success(result, metadata)); } process.exit(0); } catch (error) { logger.error(`Command failed: ${command}`, { error }); // const metadata = OutputFormatter.createMetadata(command, startTime); OutputFormatter.outputError(error, 1); } } } //# sourceMappingURL=formatter.js.map