UNPKG

porty-cli

Version:

A beautiful terminal UI for managing processes on network ports (Windows only)

80 lines (79 loc) 3.3 kB
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")))); };