UNPKG

@nu-art/commando

Version:
106 lines (105 loc) 4.92 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.NVM = exports.Cli_NVM = void 0; const fs = __importStar(require("fs")); const fs_1 = require("fs"); const path = __importStar(require("path")); const ts_common_1 = require("@nu-art/ts-common"); const CONST__FILE_NVMRC = '.nvmrc'; class Cli_NVM extends ts_common_1.Logger { constructor() { super(); this._expectedVersion = '0.39.7'; this._homeEnvVar = '$NVM_DIR'; this.install = async (commando) => { if (this.isInstalled()) { const version = (await commando.getVersion()).trim(); if (this._expectedVersion === version) return; await this.uninstall(); } await commando.install(this._expectedVersion); const rcFile = path.resolve(process.env['HOME'], '.bashrc'); let rcFileContent = ''; if (fs.existsSync(rcFile)) { rcFileContent = await fs_1.promises.readFile(rcFile, { encoding: 'utf8' }); return rcFileContent.includes('NVM_DIR'); } rcFileContent = `${rcFileContent}\n${rcFileContent.endsWith('\n') ? '' : '\n'}`; rcFileContent += `# generated NVM - start\n`; rcFileContent += `echo 'export NVM_DIR="$HOME/.nvm"'\n`; rcFileContent += `echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm'\n`; rcFileContent += `echo '[ -s "$NVM_DIR/bash_completion" ] && \\. "$NVM_DIR/bash_completion" # This loads nvm bash_completion'\n`; rcFileContent += `# generated NVM - end\n`; await fs_1.promises.writeFile(rcFile, rcFileContent, { encoding: 'utf8' }); return this; }; this.isInstalled = () => !!process.env[this._homeEnvVar] && fs.existsSync(process.env[this._homeEnvVar]); this.getRequiredNode_Version = async () => { const absolutePathToNvmrcFile = path.resolve(CONST__FILE_NVMRC); if (!fs.existsSync(absolutePathToNvmrcFile)) throw new Error(`couldn't find .nvmrc file at: ${absolutePathToNvmrcFile}`); const content = await fs_1.promises.readFile(absolutePathToNvmrcFile, { encoding: 'utf-8' }); return content.trim(); }; this.installRequiredVersionIfNeeded = async (commando) => { const requiredVersion = await this.getRequiredNode_Version(); const installedVersions = await commando.getInstalledNodeVersions(); this.logDebug('Found versions:', installedVersions); if (installedVersions.includes(requiredVersion)) return false; await this.installVersion(commando, requiredVersion); return true; }; this.uninstall = async () => { this.logDebug('Uninstalling PNPM'); const absolutePathToNVM_Home = process.env[this._homeEnvVar]; if (!absolutePathToNVM_Home) return; fs.rmSync(absolutePathToNVM_Home, { recursive: true, force: true }); }; this.installVersion = async (commando, requiredVersion) => { requiredVersion !== null && requiredVersion !== void 0 ? requiredVersion : (requiredVersion = await this.getRequiredNode_Version()); this.logDebug(`Installing version: ${requiredVersion}`); return commando.installNodeVersion(requiredVersion); }; this.setMinLevel(ts_common_1.LogLevel.Verbose); } get homeEnvVar() { return this._homeEnvVar; } set homeEnvVar(value) { this._homeEnvVar = value; } get expectedVersion() { return this._expectedVersion; } set expectedVersion(value) { this._expectedVersion = value; } } exports.Cli_NVM = Cli_NVM; exports.NVM = new Cli_NVM();