force-package-manager
Version:
A Command Line Tool to avoid that different team members use different package managers by accident, and therefor mess up your repository.
135 lines (134 loc) • 8.17 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.forcePackageManager = void 0;
var who_am_i_now_1 = require("who-am-i-now");
var cheese_log_1 = require("cheese-log");
var getWantedPackageManagerName_1 = require("./getWantedPackageManagerName");
var getWantedPackageManagerVersion_1 = require("./getWantedPackageManagerVersion");
var semver_1 = require("semver");
var getRunningPackageManagerInfo_1 = require("./getRunningPackageManagerInfo");
var allowedVerboseModes_1 = require("./allowedVerboseModes");
var log_1 = require("./log");
var cleanLockfiles_1 = require("./cleanLockfiles");
cheese_log_1.cheese.config({
reportGlobalConfigChange: false,
reportInitialization: false,
showCheeseIcon: false,
showLogLevel: false,
showDate: false,
forceNewlines: false,
});
var pkgPrefix = "force-package-manager";
var step1Title = "Step 1/3 - detect wanted package manager";
var step2Title = "Step 2/3 - detect running package manager";
var step3Title = "Step 3/3 - validate running package manager vs. wanted package manager";
var forcePackageManager = function (pkgMngrNameFromArgs, pkgMngrVersionFromArgs, clean, outputMode) {
if (outputMode === void 0) { outputMode = "verbose"; }
var who = (0, who_am_i_now_1.whoAmINow)();
if (!who.isServerApp) {
throw new Error("Library 'force-package-manager' can only be used server side.");
}
if (!allowedVerboseModes_1.allowedVerboseModes.includes(outputMode)) {
throw new Error("Invalid output mode '".concat(outputMode, "', should be one of ").concat(allowedVerboseModes_1.allowedVerboseModes.map(function (o) { return "'".concat(o, "'"); }).join(", ")));
}
(0, log_1.log)(outputMode, "normal", cheese_log_1.CheeseColors.blue, "==== ".concat(pkgPrefix, " ====="));
var error = "";
///// Step 1/3 /////
(0, log_1.log)(outputMode, "normal", cheese_log_1.CheeseColors.blue, "\t".concat(step1Title, " - START"));
var packageManagerName;
var packageManagerVersion;
try {
packageManagerName = (0, getWantedPackageManagerName_1.getWantedPackageManagerName)(outputMode, pkgMngrNameFromArgs);
packageManagerVersion = (0, getWantedPackageManagerVersion_1.getWantedPackageManagerVersion)(outputMode, pkgMngrVersionFromArgs);
(0, log_1.log)(outputMode, "normal", cheese_log_1.CheeseColors.blue, "\t\tDetected package manager name:");
(0, log_1.log)(outputMode, "normal", cheese_log_1.CheeseColors.green, "\t\t".concat(packageManagerName));
(0, log_1.log)(outputMode, "normal", cheese_log_1.CheeseColors.blue, "\t\tDetected package manager version:");
(0, log_1.log)(outputMode, "normal", cheese_log_1.CheeseColors.green, "\t\t".concat(packageManagerVersion));
}
catch (e) {
error = e.message;
}
if (error) {
(0, log_1.log)(outputMode, "normal", cheese_log_1.CheeseColors.red, "\t".concat(step1Title, " - DONE WITH ERROR"));
(0, log_1.log)(outputMode, "normal", cheese_log_1.CheeseColors.gray, "\t".concat(step2Title, " - SKIPPED"));
(0, log_1.log)(outputMode, "normal", cheese_log_1.CheeseColors.gray, "\t".concat(step3Title, " - SKIPPED"));
}
else {
(0, log_1.log)(outputMode, "normal", cheese_log_1.CheeseColors.blue, "\t".concat(step1Title, " - DONE"));
}
///// Step 2/3 /////
var packageManagerRunning;
if (!error) {
(0, log_1.log)(outputMode, "normal", error ? cheese_log_1.CheeseColors.gray : cheese_log_1.CheeseColors.blue, "\t".concat(step2Title, " - START"));
try {
packageManagerRunning = (0, getRunningPackageManagerInfo_1.getRunningPackageManagerInfo)();
(0, log_1.log)(outputMode, "normal", cheese_log_1.CheeseColors.blue, "\t\tDetected package manager name:");
(0, log_1.log)(outputMode, "normal", cheese_log_1.CheeseColors.green, "\t\t".concat(packageManagerRunning.name));
(0, log_1.log)(outputMode, "normal", cheese_log_1.CheeseColors.blue, "\t\tDetected package manager version:");
(0, log_1.log)(outputMode, "normal", cheese_log_1.CheeseColors.green, "\t\t".concat(packageManagerRunning.version));
}
catch (e) {
error = e.message;
}
if (error) {
(0, log_1.log)(outputMode, "normal", cheese_log_1.CheeseColors.red, "\t".concat(step2Title, " - DONE WITH ERROR"));
(0, log_1.log)(outputMode, "normal", cheese_log_1.CheeseColors.gray, "\t".concat(step3Title, " - SKIPPED"));
}
else {
(0, log_1.log)(outputMode, "normal", cheese_log_1.CheeseColors.blue, "\t".concat(step2Title, " - DONE"));
}
}
///// Step 3/3 /////
if (!error) {
(0, log_1.log)(outputMode, "normal", error ? cheese_log_1.CheeseColors.gray : cheese_log_1.CheeseColors.blue, "\t".concat(step3Title, " - START"));
var packageManagerNameIsValid = packageManagerRunning.name === packageManagerName;
var packageManagerVersionIsValid = !packageManagerVersion ? true : (0, semver_1.satisfies)(packageManagerRunning.version, packageManagerVersion);
var isValid = packageManagerNameIsValid && packageManagerVersionIsValid;
if (isValid) {
(0, log_1.log)(outputMode, "normal", cheese_log_1.CheeseColors.green, "\t\tPackage manager '".concat(packageManagerRunning.name, "' with version ").concat(packageManagerRunning.version, " is valid!"));
if (!packageManagerVersion) {
(0, log_1.log)(outputMode, "normal", cheese_log_1.CheeseColors.yellow, "\t\tWarning: please note that no wanted package manager version/range was provided/retrieved, therefore the version could not be checked!");
}
}
else {
if (packageManagerRunning.name !== packageManagerName) {
var errorReason = "\t\tRunning Package manager is '".concat(packageManagerRunning.name, "', but should be '").concat(packageManagerName, "'!");
error = errorReason;
(0, log_1.log)(outputMode, "normal", cheese_log_1.CheeseColors.red, errorReason);
}
else {
var errorReason = "\t\tRunning Package manager version is '".concat(packageManagerRunning.version, "', which does not satisfy ").concat(packageManagerVersion, "!");
error = errorReason;
(0, log_1.log)(outputMode, "normal", cheese_log_1.CheeseColors.red, errorReason);
}
}
if (error) {
(0, log_1.log)(outputMode, "normal", cheese_log_1.CheeseColors.red, "\t".concat(step3Title, " - DONE WITH ERROR"));
}
else {
(0, log_1.log)(outputMode, "normal", cheese_log_1.CheeseColors.blue, "\t".concat(step3Title, " - DONE"));
}
}
if (error) {
if (clean && packageManagerName) {
(0, cleanLockfiles_1.cleanLockfiles)(outputMode, packageManagerName);
}
else {
if (!packageManagerRunning) {
try {
// this is an additional step, in case error already occurred during step 1
packageManagerRunning = (0, getRunningPackageManagerInfo_1.getRunningPackageManagerInfo)();
}
catch (e) { }
}
if (packageManagerRunning.name !== packageManagerName) {
(0, log_1.log)(outputMode, "mute", cheese_log_1.CheeseColors.yellow, "WARNING: since the running package manager (".concat(packageManagerRunning.name, ") is different from the wanted one (").concat(packageManagerName, "), a new lockfile could have just been created. Consider using the script's --clean / -c option to automatically remove it."));
}
}
(0, log_1.log)(outputMode, "normal", cheese_log_1.CheeseColors.red, "SUMMARY: Package Manager Validation Error:");
(0, log_1.log)(outputMode, "mute", cheese_log_1.CheeseColors.red, "".concat(error.replace(/\t/g, "")));
}
(0, log_1.log)(outputMode, "normal", cheese_log_1.CheeseColors.blue, "=================================");
return !error;
};
exports.forcePackageManager = forcePackageManager;