UNPKG

@ima/cli

Version:

IMA.js CLI tool to build, develop and work with IMA.js applications.

71 lines (70 loc) 2.54 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.builder = exports.handler = exports.describe = exports.command = void 0; const child_process_1 = require("child_process"); const fs_1 = __importDefault(require("fs")); const path_1 = __importDefault(require("path")); const logger_1 = require("@ima/dev-utils/logger"); const cli_1 = require("../lib/cli"); /** * Starts ima application in production mode. * * @param {CliArgs} args * @returns {Promise<void>} */ const start = async (args) => { try { const serverPath = args.server ? path_1.default.resolve(args.rootDir, args.server) : path_1.default.resolve(args.rootDir, 'server/server.js'); // Validate server file exists if (!fs_1.default.existsSync(serverPath)) { logger_1.logger.error(`Server file not found at: ${serverPath}`); process.exit(1); } logger_1.logger.info('Starting production server...'); // Spawn node process with the server const serverProcess = (0, child_process_1.spawn)('node', [serverPath], { stdio: 'inherit', env: { ...process.env }, }); // Handle server process events serverProcess.on('error', error => { logger_1.logger.error(`Failed to start server process: ${error.message}`); process.exit(1); }); // Forward SIGTERM and SIGINT to the child process const signals = ['SIGTERM', 'SIGINT']; signals.forEach(signal => { process.on(signal, () => { if (serverProcess.pid) { process.kill(serverProcess.pid, signal); } process.exit(); }); }); } catch (error) { if (error instanceof Error) { logger_1.logger.error(`Failed to start server: ${error.message}`); } else { logger_1.logger.error('Failed to start server: Unknown error'); } process.exit(1); } }; const CMD = 'start'; exports.command = CMD; exports.describe = 'Start the application in production mode'; exports.handler = (0, cli_1.handlerFactory)(start); exports.builder = { server: { type: 'string', description: 'Custom path to the server file (relative to project root)', default: 'server/server.js', }, };