@buger/probe-web
Version:
Web interface for Probe code search
92 lines (76 loc) • 2.42 kB
JavaScript
// This script starts the Probe web interface
import path from 'path';
import { fileURLToPath } from 'url';
import { spawn } from 'child_process';
import fs from 'fs';
import { Command } from 'commander';
// Get the directory name of the current module
const __dirname = path.dirname(fileURLToPath(import.meta.url));
const packageDir = path.resolve(__dirname, '..');
const mainJsPath = path.join(packageDir, 'main.js');
const packageJsonPath = path.join(packageDir, 'package.json');
// Read package.json to get the version
let version = '1.0.0'; // Default fallback version
try {
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
version = packageJson.version || version;
} catch (error) {
console.warn(`Warning: Could not read version from package.json: ${error.message}`);
}
// Create a new instance of the program
const program = new Command();
// Configure the program
program
.name('probe-web')
.description('Web interface for Probe code search')
.version(version)
.option('-p, --port <port>', 'Port to run the server on (default: 8080)')
.option('-d, --debug', 'Enable debug mode')
.parse(process.argv);
// Get the options
const options = program.opts();
// Set debug mode if specified
if (options.debug) {
process.env.DEBUG = 'true';
console.log('Debug mode enabled');
}
// Set port if specified
if (options.port) {
process.env.PORT = options.port;
console.log(`Using port: ${options.port}`);
}
// Check if main.js exists
if (!fs.existsSync(mainJsPath)) {
console.error('Error: main.js not found in the package directory');
process.exit(1);
}
console.log('Starting Probe Web Interface from:', packageDir);
console.log(`Version: ${version}`);
// Start the web server
const server = spawn('node', [mainJsPath], {
cwd: packageDir,
stdio: 'inherit',
env: {
...process.env,
PROBE_WEB_INTERFACE: 'true'
}
});
// Handle server process events
server.on('error', (err) => {
console.error('Failed to start web server:', err);
process.exit(1);
});
server.on('close', (code) => {
console.log(`Web server process exited with code ${code}`);
process.exit(code);
});
// Handle termination signals
process.on('SIGINT', () => {
console.log('Received SIGINT. Shutting down web server...');
server.kill('SIGINT');
});
process.on('SIGTERM', () => {
console.log('Received SIGTERM. Shutting down web server...');
server.kill('SIGTERM');
});