UNPKG

@ai-mapping/mcp-nextjs-dev

Version:

MCP server for managing Next.js development processes with AI tools

101 lines 3.35 kB
export class StateManager { static instance; state; constructor() { this.state = { isRunning: false, port: 3000, serverUrl: '', startTime: null, logs: [], }; } static getInstance() { if (StateManager.instance === undefined) { StateManager.instance = new StateManager(); } return StateManager.instance; } getState() { return { ...this.state }; } setRunning(port, serverUrl) { this.state.isRunning = true; this.state.port = port; this.state.serverUrl = serverUrl; this.state.startTime = new Date(); } setStopped() { this.state.isRunning = false; this.state.serverUrl = ''; this.state.startTime = null; } addLog(entry) { this.state.logs.push(entry); if (this.state.logs.length > 1000) { this.state.logs.shift(); } } clearLogs() { this.state.logs = []; } getStatus(processId) { const status = { isRunning: this.state.isRunning, port: this.state.port, logCount: this.state.logs.length, }; if (this.state.isRunning && processId !== undefined) { status.processId = processId; status.serverUrl = this.state.serverUrl; if (this.state.startTime !== null) { const uptimeMs = Date.now() - this.state.startTime.getTime(); status.uptime = Math.floor(uptimeMs / 1000); } } return status; } getLogs(params) { let filteredLogs = [...this.state.logs]; if (params) { if (params.level && params.level !== 'all') { filteredLogs = filteredLogs.filter((log) => log.level === params.level); } if (params.filter !== undefined && params.filter !== '') { const filterLower = params.filter.toLowerCase(); filteredLogs = filteredLogs.filter((log) => log.message.toLowerCase().includes(filterLower)); } if (params.since !== undefined && params.since > 0) { const sinceTime = new Date(Date.now() - params.since * 1000); filteredLogs = filteredLogs.filter((log) => new Date(log.timestamp) >= sinceTime); } const maxLines = params.lines !== undefined ? params.lines : 50; filteredLogs = filteredLogs.slice(-maxLines); } return { entries: filteredLogs, total: filteredLogs.length, serverRunning: this.state.isRunning, }; } isRunning() { return this.state.isRunning; } getPort() { return this.state.port; } getServerUrl() { return this.state.serverUrl; } clearOldLogs(cutoffTimestamp) { const initialCount = this.state.logs.length; const cutoffDate = new Date(cutoffTimestamp); this.state.logs = this.state.logs.filter((log) => { const logDate = new Date(log.timestamp); return logDate >= cutoffDate; }); return initialCount - this.state.logs.length; } } export const stateManager = StateManager.getInstance(); //# sourceMappingURL=state-manager.js.map