@curvenote/cli
Version:
CLI Client library for Curvenote
58 lines (57 loc) • 2.34 kB
JavaScript
import path from 'node:path';
import fs from 'node:fs';
import { version as mystCliVersion } from 'myst-cli';
import { isDirectory } from 'myst-cli-utils';
import CurvenoteVersion from '../version.js';
function packageJsonInFolder(folder) {
const packageJson = path.join(folder, 'package.json');
if (fs.existsSync(packageJson))
return packageJson;
}
export function logVersions(session, result, debug = true) {
const versions = [];
Object.entries(result?.versions ?? {}).forEach(([name, p]) => {
versions.push([
name,
p.version ? `${p.version}` : 'Package Not Found',
`Required: ${p.wanted?.raw || ''}`,
p.isSatisfied ? '✅' : '⚠️',
]);
});
versions.push(['myst-cli', mystCliVersion]);
versions.push(['curvenote', CurvenoteVersion]);
const siteTemplatePackageJsons = [];
const siteTemplateFolder = path.join(session.buildPath(), 'templates', 'site');
if (fs.existsSync(siteTemplateFolder)) {
fs.readdirSync(siteTemplateFolder)
.map((folder) => path.join(siteTemplateFolder, folder))
.filter((folder) => isDirectory(folder))
.forEach((folder) => {
siteTemplatePackageJsons.push(packageJsonInFolder(folder));
fs.readdirSync(folder)
.map((subfolder) => path.join(folder, subfolder))
.filter((subfolder) => isDirectory(subfolder))
.forEach((subfolder) => {
siteTemplatePackageJsons.push(packageJsonInFolder(subfolder));
});
});
}
siteTemplatePackageJsons
.filter((file) => !!file)
.forEach((file) => {
try {
// TODO: Improve this to tell you more about themes
const packageJson = JSON.parse(fs.readFileSync(file).toString());
if (packageJson.name && packageJson.version) {
versions.push([packageJson.name, packageJson.version]);
}
}
catch (error) {
// pass
}
});
const versionString = versions
.map(([n, v, r, c]) => `\n - ${n.padEnd(25, ' ')}${v.padStart(10, ' ').padEnd(15, ' ')}${r?.padEnd(25) ?? ''}${c ?? ''}`)
.join('');
session.log[debug ? 'debug' : 'info'](`\n\nCurvenote CLI Versions:${versionString}\n\n`);
}