UNPKG

create-testplane

Version:

A tool for fast and simple Testplane configuration

87 lines 4.03 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.installPackages = exports.initApp = void 0; const ora_1 = __importDefault(require("ora")); const path_1 = __importDefault(require("path")); const child_process_1 = require("child_process"); const fsUtils_1 = __importDefault(require("./fsUtils")); const packageManagement_1 = require("./constants/packageManagement"); const colors_1 = require("./utils/colors"); const utils_1 = require("./utils"); const getPackageManager = async (dirPath, extraQuestions) => { let packageManager; const packageManagers = Object.keys(packageManagement_1.PMS); await Promise.all(packageManagers.map(async (pm) => { const isLockfileExist = await fsUtils_1.default.exists(path_1.default.resolve(dirPath, packageManagement_1.PMS[pm].lock)); if (isLockfileExist) { packageManager = pm; } })); if (packageManager) { return packageManager; } if (!extraQuestions) { return packageManagement_1.DEFAULT_PM; } return (0, utils_1.askQuestion)({ type: "list", message: "Choose preferred package manager:", choices: Object.keys(packageManagement_1.PMS), default: packageManagement_1.DEFAULT_PM, }); }; const findExistingConfig = async (dirPath) => { const configExistsPromises = Object.values(packageManagement_1.CONFIG_NAMES).map(async (configName) => { const configPath = path_1.default.resolve(dirPath, configName); const exists = await fsUtils_1.default.exists(configPath); return exists ? configName : null; }); const existingConfigs = await Promise.all(configExistsPromises); return existingConfigs.find(Boolean) || null; }; const initNodeProject = (dirPath, packageManager) => new Promise((resolve, reject) => { (0, child_process_1.exec)(`${packageManager} ${packageManagement_1.PMS[packageManager].init}`, { cwd: dirPath, env: process.env, }, (error, stdout, stderr) => (error ? reject(stderr) : resolve(stdout))); }); const initApp = async (dirPath, extraQuestions) => { await fsUtils_1.default.ensureDirectory(dirPath); const existingConfigName = await findExistingConfig(dirPath); if (existingConfigName) { console.error(`Looks like ${dirPath} already contains "${existingConfigName}".`); console.error("Please remove old config or choose another directory."); process.exit(1); } const packageManager = await getPackageManager(dirPath, extraQuestions); const isPackageJsonExist = await fsUtils_1.default.exists(path_1.default.resolve(dirPath, packageManagement_1.PACKAGE_JSON)); if (!isPackageJsonExist) { await initNodeProject(dirPath, packageManager); } return packageManager; }; exports.initApp = initApp; const installPackages = async (dirPath, packageManager, pluginsToInstall, registry) => { const spinner = (0, ora_1.default)("Installing packages (this may take a while)").start(); const pluginsPackages = pluginsToInstall.map(utils_1.packageNameFromPlugin).join(" "); return new Promise((resolve, reject) => { (0, child_process_1.exec)(packageManagement_1.PMS[packageManager].withRegistry(`${packageManager} ${packageManagement_1.PMS[packageManager].install} testplane ${pluginsPackages}`, registry), { cwd: dirPath, env: process.env, }, (error, stdout, stderr) => { if (error) { spinner.fail("An error occured during installation"); reject(stderr); } else { spinner.succeed(`Testplane and plugins have been installed successfully at ${colors_1.Colors.fillGreen(dirPath)}`); resolve(stdout); } }); }); }; exports.installPackages = installPackages; //# sourceMappingURL=package.js.map