@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
JavaScript
;
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);
});