porty-cli
Version:
A beautiful terminal UI for managing processes on network ports (Windows only)
80 lines (79 loc) • 3.3 kB
JavaScript
import React, { useEffect, useState } from 'react';
import { Box, Text, useApp } from 'ink';
import chalk from 'chalk';
import { getProcessOnPort } from '../utils/portDetector.js';
import { Logo } from './Logo.js';
export const CheckMode = ({ port }) => {
const { exit } = useApp();
const [loading, setLoading] = useState(true);
const [process, setProcess] = useState(null);
const [error, setError] = useState(null);
useEffect(() => {
const checkPort = async () => {
try {
const proc = await getProcessOnPort(port);
setProcess(proc);
}
catch (err) {
setError(err instanceof Error ? err.message : 'Unknown error');
}
finally {
setLoading(false);
setTimeout(() => exit(), 100);
}
};
checkPort();
}, [port, exit]);
if (loading) {
return (React.createElement(Box, { flexDirection: "column" },
React.createElement(Logo, null),
React.createElement(Box, null,
React.createElement(Text, { color: "yellow" },
"Checking port ",
port,
"..."))));
}
if (error) {
return (React.createElement(Box, { flexDirection: "column" },
React.createElement(Logo, null),
React.createElement(Text, { color: "red" },
"Error checking port ",
port,
":"),
React.createElement(Text, { color: "red" }, error)));
}
if (!process) {
return (React.createElement(Box, { flexDirection: "column" },
React.createElement(Logo, null),
React.createElement(Box, null,
React.createElement(Text, { color: "green" },
"\u2713 Port ",
port,
" is free!"))));
}
return (React.createElement(Box, { flexDirection: "column" },
React.createElement(Logo, null),
React.createElement(Text, { color: "cyan", bold: true },
"Port ",
port,
" is in use:"),
React.createElement(Box, { marginTop: 1, flexDirection: "column" },
React.createElement(Text, null,
React.createElement(Text, { color: "yellow" }, "PID: "),
React.createElement(Text, null, process.pid)),
React.createElement(Text, null,
React.createElement(Text, { color: "yellow" }, "Process: "),
React.createElement(Text, null, process.processName || 'Unknown')),
React.createElement(Text, null,
React.createElement(Text, { color: "yellow" }, "Command: "),
React.createElement(Text, null, process.command || 'N/A')),
process.fullCommand && (React.createElement(Box, { marginTop: 1 },
React.createElement(Text, { dimColor: true },
"Full command: ",
process.fullCommand)))),
React.createElement(Box, { marginTop: 1 },
React.createElement(Text, { dimColor: true },
"Tip: Use ",
chalk.cyan('porty --kill ' + port),
" to free this port"))));
};