UNPKG

a2r

Version:
98 lines (97 loc) 4.49 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const path_1 = __importDefault(require("path")); const execa_1 = __importDefault(require("execa")); const telemetry_1 = require("@a2r/telemetry"); const fs_1 = require("@a2r/fs"); const settings_1 = require("./settings"); const getProjectPath_1 = __importDefault(require("./getProjectPath")); const getCleanProjectName_1 = __importDefault(require("./getCleanProjectName")); const colors_1 = require("./colors"); const createDevServerDocker_1 = __importDefault(require("./createDevServerDocker")); const start_1 = __importDefault(require("./watcher/start")); const onProcessExit_1 = __importDefault(require("./onProcessExit")); const copyProjectContentsToDocker_1 = __importDefault(require("./copyProjectContentsToDocker")); const docker_1 = require("./docker"); const settings_2 = require("../settings"); /** * Temporary `dev` command that will run all needed dockers for solution */ const start = async (info) => { var _a; const { options } = info; if (options.settings) { await (0, settings_1.setFileName)(options.settings); } const settings = await (0, settings_1.getSettings)(); const { projects, devServer } = settings; if (projects.length) { const mainProjectPath = await (0, getProjectPath_1.default)(); const mainServerPath = path_1.default.resolve(mainProjectPath, settings_2.serverPath); const a2rInternalPath = path_1.default.resolve(mainProjectPath, settings_2.projectsInternalPath); const cleanProjectName = settings.projectName || (await (0, getCleanProjectName_1.default)(mainProjectPath)); const cookieKey = `${cleanProjectName}_sessionId`; const userTokenKey = `${cleanProjectName}_userToken`; const devServerInternalPath = path_1.default.resolve(a2rInternalPath, settings_2.devServerPath); const devServerModules = path_1.default.resolve(devServerInternalPath, 'node_modules'); const devServerEnv = path_1.default.resolve(devServerInternalPath, '.env'); await (0, fs_1.ensureDir)(devServerInternalPath); await (0, fs_1.ensureDir)(devServerModules); const devSettings = await (0, createDevServerDocker_1.default)(settings, settings.devServer.name, devServerModules, devServerEnv, [ [settings_2.cookieKeyKey, cookieKey], [settings_2.userTokenKeyKey, userTokenKey], ]); (0, colors_1.log)(`Starting ${devSettings.server.dockerName} docker...`); await (0, execa_1.default)('docker', ['start', devSettings.server.dockerName]); await (0, copyProjectContentsToDocker_1.default)(mainServerPath, devSettings.server.dockerName, settings_2.dockerServerPath); await (0, docker_1.checkForFrameworkOnServer)(devSettings.server.dockerName); const additionalFolders = new Set(['utils', 'tools']); if ((_a = devServer.watchFolders) === null || _a === void 0 ? void 0 : _a.length) { devServer.watchFolders.forEach((folder) => { additionalFolders.add(folder); }); } await (0, start_1.default)(mainProjectPath, devServerInternalPath, Array.from(additionalFolders)); const dockerExecParams = [ 'exec', '-t', devSettings.server.dockerName, 'npm', 'run', 'dev', ]; let killed = false; const subProcess = (0, execa_1.default)('docker', dockerExecParams, { stdout: process.stdout, stderr: process.stderr, }); process.once('SIGINT', () => { killed = true; (0, onProcessExit_1.default)(devSettings.server.dockerName).then(() => { subProcess.kill(); process.exit(0); }); }); try { await subProcess; } catch (ex) { if (!killed) { (0, colors_1.log)(`Sub process error\n${ex.stack || ex.message}`); } } } else { telemetry_1.out.warn(`You must add at least one project to solution before running ${(0, colors_1.terminalCommand)('--dev')} command`); } }; const command = { name: 'start', description: 'Runs watcher and server', run: start, args: [], }; exports.default = command;