UNPKG

@nerdo/code-reviewer

Version:

A web-based visual git diff tool for reviewing code changes between commits, branches, and tags

156 lines (151 loc) 5.03 kB
#!/usr/bin/env node "use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); Object.defineProperty(exports, "__esModule", { value: true }); const child_process_1 = require("child_process"); const path_1 = require("path"); const fs = __importStar(require("fs")); const args = process.argv.slice(2); const PORT = process.env.PORT || 3001; const packageDir = (0, path_1.dirname)((0, path_1.dirname)(__filename)); const serverPath = (0, path_1.join)(packageDir, 'dist', 'server', 'index.js'); const clientPath = (0, path_1.join)(packageDir, 'dist'); function showHelp() { console.log(` @nerdo/code-reviewer - Visual Git Diff Tool Usage: npx @nerdo/code-reviewer [options] Options: -p, --port <port> Port to run on (default: 3001) -h, --help Show this help message --version Show version Examples: npx @nerdo/code-reviewer npx @nerdo/code-reviewer --port 8080 The tool will start a local web server and open your browser to view git diffs. Make sure you run this command from within a git repository. `); } function showVersion() { const packageJsonPath = (0, path_1.join)(packageDir, 'package.json'); try { const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8')); console.log(packageJson.version); } catch (error) { console.log('Unknown version'); } } let port = PORT; for (let i = 0; i < args.length; i++) { const arg = args[i]; if (arg === '-h' || arg === '--help') { showHelp(); process.exit(0); } if (arg === '--version') { showVersion(); process.exit(0); } if (arg === '-p' || arg === '--port') { const nextArg = args[i + 1]; if (nextArg && !isNaN(parseInt(nextArg))) { port = nextArg; i++; } else { console.error('Error: --port requires a valid port number'); process.exit(1); } } } function checkGitRepo() { try { const { execSync } = require('child_process'); execSync('git rev-parse --git-dir', { stdio: 'ignore' }); return true; } catch (error) { return false; } } if (!checkGitRepo()) { console.error('Error: Not in a git repository. Please run this command from within a git repository.'); process.exit(1); } if (!fs.existsSync(serverPath)) { console.error(`Error: Server file not found at ${serverPath}`); console.error('The package may not be properly installed. Try reinstalling with:'); console.error('npm install -g @nerdo/code-reviewer'); process.exit(1); } console.log('Starting Code Reviewer...'); console.log(`Server will run on http://localhost:${port}`); function openBrowser(url) { const start = process.platform === 'darwin' ? 'open' : process.platform === 'win32' ? 'start' : 'xdg-open'; setTimeout(() => { const { exec } = require('child_process'); exec(`${start} ${url}`, (error) => { if (error) { console.log(`Open your browser and navigate to: ${url}`); } }); }, 2000); } const server = (0, child_process_1.spawn)('node', [serverPath], { env: { ...process.env, PORT: port.toString(), DIST_PATH: clientPath }, stdio: 'inherit' }); openBrowser(`http://localhost:${port}`); server.on('close', (code) => { if (code !== 0) { console.error(`Server exited with code ${code}`); process.exit(code || 1); } }); process.on('SIGINT', () => { console.log('\nShutting down Code Reviewer...'); server.kill('SIGINT'); process.exit(0); }); process.on('SIGTERM', () => { server.kill('SIGTERM'); process.exit(0); });