@ai-mapping/mcp-nextjs-dev
Version:
MCP server for managing Next.js development processes with AI tools
101 lines • 3.35 kB
JavaScript
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