create-testplane
Version:
A tool for fast and simple Testplane configuration
94 lines • 4.79 kB
JavaScript
;
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 load_esm_1 = require("load-esm");
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.inquirerPrompt)({
type: "select",
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) => {
var _a;
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);
}
const packageJson = await fsUtils_1.default.readJson(path_1.default.resolve(dirPath, packageManagement_1.PACKAGE_JSON));
if (packageJson && (!((_a = packageJson === null || packageJson === void 0 ? void 0 : packageJson.scripts) === null || _a === void 0 ? void 0 : _a.test) || !isPackageJsonExist)) {
packageJson.scripts = Object.assign(Object.assign({}, ((packageJson === null || packageJson === void 0 ? void 0 : packageJson.scripts) || {})), { test: "testplane", "test:gui": "testplane gui" });
await fsUtils_1.default.writeJson(path_1.default.resolve(dirPath, packageManagement_1.PACKAGE_JSON), packageJson);
}
return packageManager;
};
exports.initApp = initApp;
const installPackages = async (dirPath, packageManager, pluginsToInstall, registry) => {
const { default: ora } = await (0, load_esm_1.loadEsm)("ora");
const spinner = ora("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 @testplane/globals @testplane/testing-library @swc/core ${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