UNPKG

a2r

Version:
129 lines (128 loc) 6.21 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 getProjectPath_1 = __importDefault(require("./getProjectPath")); const settings_1 = require("./settings"); const devSettings_1 = require("./devSettings"); const colors_1 = require("./colors"); const docker_1 = require("./docker"); const settings_2 = require("../settings"); const getCurrentProjectPath = async () => { const workingDirectory = process.cwd(); const mainPath = await (0, getProjectPath_1.default)(); if (workingDirectory === mainPath) { (0, colors_1.log)(`Command ${(0, colors_1.terminalCommand)('npm install')} must be run inside the server folder or a project folder`); return ''; } const settings = await (0, settings_1.getSettings)(); const validPaths = new Set([ path_1.default.resolve(mainPath, 'server'), ...settings.projects.map((p) => path_1.default.resolve(mainPath, p.path)), ]); if (validPaths.has(workingDirectory)) { return workingDirectory; } let validPath = ''; let currentPath = path_1.default.dirname(workingDirectory); while (!validPath && currentPath !== mainPath) { if (validPaths.has(currentPath)) { validPath = currentPath; } currentPath = path_1.default.dirname(currentPath); } if (!validPath) { (0, colors_1.log)(`Command ${(0, colors_1.terminalCommand)('npm install')} must be run inside the server folder or a project folder`); } return validPath; }; const npmInstall = async (info) => { const currentProjectPath = await getCurrentProjectPath(); if (currentProjectPath) { const [install, ...packages] = info.argv; if (install === 'install') { const npmParams = ['install']; if (packages && packages.length) { npmParams.push(...packages); } const projectPath = path_1.default.basename(currentProjectPath); const target = projectPath === 'server' ? 'server' : 'project'; (0, colors_1.log)(`Installing on ${target} path...`); await (0, execa_1.default)('npm', npmParams, { stdout: process.stdout, stderr: process.stderr, cwd: currentProjectPath, }); const check = await (0, devSettings_1.settingsExist)(); if (check) { const devSettings = await (0, devSettings_1.getSettings)(); if (target === 'server') { const checkDocker = await (0, docker_1.dockerExists)(`name=${devSettings.server.dockerName}`, true); if (checkDocker) { await (0, execa_1.default)('docker', ['start', devSettings.server.dockerName]); if (!packages || !packages.length) { await (0, docker_1.copyPathToDocker)(path_1.default.resolve(currentProjectPath, 'package.json'), path_1.default.resolve(settings_2.dockerServerPath, 'package.json'), devSettings.server.dockerName); } (0, colors_1.log)('Running npm install on server docker...'); await (0, execa_1.default)('docker', [ 'exec', '-t', devSettings.server.dockerName, 'npm', ...npmParams, '--prefix', './server', ], { stdout: process.stdout, stderr: process.stderr, }); } else { (0, colors_1.log)(`Not installing in docker because server docker doesn't exist yet`); } } else { const project = devSettings.activeProjects.find((p) => p.path === projectPath); if (project) { const { dockerName } = project; const checkDocker = await (0, docker_1.dockerExists)(`name=${dockerName}`, true); if (checkDocker) { await (0, execa_1.default)('docker', ['start', dockerName]); if (!packages || !packages.length) { await (0, docker_1.copyPathToDocker)(path_1.default.resolve(currentProjectPath, 'package.json'), path_1.default.resolve(settings_2.defaultDockerWorkDir, 'package.json'), dockerName); } (0, colors_1.log)('Running npm install on server docker...'); await (0, execa_1.default)('docker', ['exec', '-t', dockerName, 'npm', ...npmParams], { stdout: process.stdout, stderr: process.stderr, }); } else { (0, colors_1.log)(`Not installing in docker because project docker doesn't exist yet`); } } else { (0, colors_1.log)(`Not installing in docker because project wasn't found in running projects`); } } } else { (0, colors_1.log)(`Not installing in docker because ${target} has never been started`); } } else { telemetry_1.out.error(`Command ${(0, colors_1.terminalCommand)(`npm ${install}`)} not supported`); } } }; const command = { name: 'npm', description: 'Install npm packages in working directory project and its docker (if at least created)', run: npmInstall, args: [], }; exports.default = command;