@expressots/cli
Version:
Expressots CLI - modern, fast, lightweight nodejs web framework (@cli)
102 lines (101 loc) • 3.9 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.removeProvider = exports.addProvider = void 0;
const chalk_1 = __importDefault(require("chalk"));
const node_child_process_1 = require("node:child_process");
const node_fs_1 = __importDefault(require("node:fs"));
const node_process_1 = require("node:process");
const cli_ui_1 = require("../../utils/cli-ui");
const PACKAGE_MANAGERS = {
npm: {
install: "install",
addDev: "install --save-dev",
remove: "uninstall",
},
yarn: {
install: "add",
addDev: "add --dev",
remove: "remove",
},
pnpm: {
install: "add",
addDev: "add --save-dev",
remove: "remove",
},
};
function detectPackageManager() {
const lockFiles = ["package-lock.json", "yarn.lock", "pnpm-lock.yaml"];
const managers = Object.keys(PACKAGE_MANAGERS);
for (let i = 0; i < lockFiles.length; i++) {
if (node_fs_1.default.existsSync(lockFiles[i])) {
return managers[i];
}
}
return null;
}
async function execProcess({ command, args, directory, }) {
return new Promise((resolve, reject) => {
const isWindows = process.platform === "win32";
const execCommand = isWindows ? `${command}.cmd` : command;
const processRunner = (0, node_child_process_1.spawn)(execCommand, args, {
cwd: directory,
shell: true,
});
console.log(chalk_1.default.bold.blue(`Executing: ${command} ${args.join(" ")}`));
console.log(chalk_1.default.yellow("-------------------------------------------------"));
processRunner.stdout.on("data", (data) => {
console.log(chalk_1.default.green(data.toString().trim()));
});
processRunner.stderr.on("data", (data) => {
console.error(chalk_1.default.red(data.toString().trim()));
});
processRunner.on("close", (code) => {
if (code === 0) {
console.log(chalk_1.default.bold.green("Operation completed successfully!\n"));
resolve();
}
else {
console.error(chalk_1.default.bold.red(`Command failed with exit code ${code}`));
reject(new Error(`Command failed with exit code ${code}`));
(0, node_process_1.exit)(1);
}
});
});
}
async function addProvider(packageName, version, isDevDependency = false) {
const packageManager = detectPackageManager();
if (!packageManager) {
(0, cli_ui_1.printError)("No package manager found in the project", "add-package");
return;
}
const pkgManagerConfig = PACKAGE_MANAGERS[packageManager];
const command = isDevDependency
? pkgManagerConfig.addDev
: pkgManagerConfig.install;
const versionSuffix = version && version !== "latest" ? `@${version}` : "";
console.log(`${isDevDependency ? "Adding devDependency" : "Installing"} ${packageName}...`);
await execProcess({
command: packageManager,
args: [...command.split(" "), `${packageName}${versionSuffix}`],
directory: process.cwd(),
});
}
exports.addProvider = addProvider;
async function removeProvider(packageName) {
const packageManager = detectPackageManager();
if (!packageManager) {
(0, cli_ui_1.printError)("No package manager found in the project", "remove-package");
return;
}
const command = PACKAGE_MANAGERS[packageManager].remove;
console.log(`Removing ${packageName}...`);
await execProcess({
command: packageManager,
args: [...command.split(" "), packageName],
directory: process.cwd(),
});
}
exports.removeProvider = removeProvider;