UNPKG

myst-cli

Version:
58 lines (52 loc) 1.89 kB
import chalk from 'chalk'; import check from 'check-node-version'; import version from '../version.js'; import { docLinks } from '../docs.js'; const INSTALL_NODE_MESSAGE = ` You can download Node here: ${chalk.bold('https://nodejs.org/en/download/')} Upgrade your Node Package Manager (npm) using: ${chalk.bold('npm install -g npm@latest')} Additional Documentation: ${chalk.bold.blue(docLinks.installNode)} `; export async function getNodeVersion(session) { const result = new Promise((resolve) => { check({ node: '>= 18.0.0', npm: '>=8.6.0' }, (error, results) => { if (error) { session.log.error(error); resolve(null); return; } resolve(results); }); }); return result; } export function logVersions(session, result, debug = true) { const versions = []; Object.entries(result?.versions ?? {}).forEach(([name, p]) => { versions.push([ p.isSatisfied, name, p.version ? `${p.version}` : 'Package Not Found', `Required: ${p.wanted?.raw || ''}`, ]); }); versions.push([undefined, 'myst', version]); const versionString = versions .map(([good, n, v, r]) => chalk[good === true ? 'green' : good === false ? 'red' : 'dim'](`\n - ${n.padEnd(25, ' ')}${v.padStart(10, ' ').padEnd(15, ' ')}${r?.padEnd(25) ?? ''}`)) .join(''); session.log[debug ? 'debug' : 'info'](`\n\nMyst CLI Versions:${versionString}\n\n`); } export async function checkNodeVersion(session) { const result = await getNodeVersion(session); if (!result) return false; if (result.isSatisfied) return true; logVersions(session, result, false); session.log.error('Please update your Node or NPM versions.\n'); session.log.info(INSTALL_NODE_MESSAGE); return false; }