@nu-art/commando
Version:
106 lines (105 loc) • 4.92 kB
JavaScript
;
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();