myst-cli
Version:
Command line tools for MyST
63 lines (57 loc) • 2.16 kB
JavaScript
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) {
var _a;
const versions = [];
Object.entries((_a = result === null || result === void 0 ? void 0 : result.versions) !== null && _a !== void 0 ? _a : {}).forEach(([name, p]) => {
var _a;
versions.push([
p.isSatisfied,
name,
p.version ? `${p.version}` : 'Package Not Found',
`Required: ${((_a = p.wanted) === null || _a === void 0 ? void 0 : _a.raw) || ''}`,
]);
});
versions.push([undefined, 'myst', version]);
const versionString = versions
.map(([good, n, v, r]) => {
var _a;
return chalk[good === true ? 'green' : good === false ? 'red' : 'dim'](`\n - ${n.padEnd(25, ' ')}${v.padStart(10, ' ').padEnd(15, ' ')}${(_a = r === null || r === void 0 ? void 0 : r.padEnd(25)) !== null && _a !== void 0 ? _a : ''}`);
})
.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;
}