@masuidrive/ticket
Version:
Real-time ticket tracking viewer with Vite + Express
80 lines (64 loc) • 2.12 kB
text/typescript
import { TicketServer } from './server';
import path from 'path';
const DEFAULT_PORT = 4932;
function parseArgs(): { port: number; projectRoot: string } {
const args = process.argv.slice(2);
let port = DEFAULT_PORT;
let projectRoot = process.cwd();
for (let i = 0; i < args.length; i++) {
if ((args[i] === '-p' || args[i] === '--port') && args[i + 1]) {
port = parseInt(args[i + 1], 10);
if (isNaN(port)) {
console.error('Invalid port number');
process.exit(1);
}
i++;
} else if ((args[i] === '-d' || args[i] === '--dir') && args[i + 1]) {
projectRoot = path.resolve(args[i + 1]);
i++;
} else if (args[i] === '-h' || args[i] === '--help') {
showHelp();
process.exit(0);
}
}
return { port, projectRoot };
}
function showHelp(): void {
console.log(`
Ticket Viewer Server - Serves current-ticket.md with real-time updates
Usage: npx @masuidrive/ticket [options]
Options:
-p, --port <number> Port to run the server on (default: ${DEFAULT_PORT})
-d, --dir <path> Project directory containing current-ticket.md (default: current directory)
-h, --help Show this help message
Examples:
npx @masuidrive/ticket # Start server on default port
npx @masuidrive/ticket -p 5000 # Start server on port 5000
npx @masuidrive/ticket -d ../myproject # Serve ticket from different directory
`);
}
function main(): void {
const { port, projectRoot } = parseArgs();
console.log(`Starting Ticket Viewer Server...`);
console.log(`Project root: ${projectRoot}`);
console.log(`Port: ${port}`);
const server = new TicketServer(port, projectRoot);
server.start();
// Handle graceful shutdown
process.on('SIGINT', () => {
console.log('\nShutting down server...');
server.stop();
process.exit(0);
});
process.on('SIGTERM', () => {
console.log('\nShutting down server...');
server.stop();
process.exit(0);
});
}
// Run if this is the main module
if (require.main === module) {
main();
}
export { TicketServer };