UNPKG

@expressots/cli

Version:

Expressots CLI - modern, fast, lightweight nodejs web framework (@cli)

102 lines (101 loc) 3.9 kB
"use strict"; 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;