flecks/packages/dox/build/commands.js

87 lines
2.6 KiB
JavaScript
Raw Normal View History

2024-01-16 00:28:20 -06:00
const {
2023-12-31 16:21:43 -06:00
access,
cp,
mkdir,
rename,
rmdir,
2024-01-16 00:28:20 -06:00
} = require('fs/promises');
const {dirname, join} = require('path');
const {
2023-12-31 16:21:43 -06:00
generate,
resolveSiteDir,
spawn,
2024-01-16 00:28:20 -06:00
} = require('./docusaurus');
2023-12-31 16:21:43 -06:00
const {
FLECKS_CORE_ROOT = process.cwd(),
} = process.env;
2024-01-16 00:28:20 -06:00
module.exports = (program, flecks) => {
2023-12-31 16:21:43 -06:00
const commands = {};
2024-01-22 09:16:07 -06:00
const siteDirArgument = program.createArgument('[siteDir]', 'Docusaurus directory');
2023-12-31 16:21:43 -06:00
siteDirArgument.defaultValue = 'website';
commands.docusaurus = {
description: 'create a documentation website for this project',
action: async (subcommand, siteDir) => {
const resolvedSiteDir = resolveSiteDir(siteDir);
let siteDirExisted = false;
try {
const result = await mkdir(resolvedSiteDir);
if (undefined === result) {
await rmdir(resolvedSiteDir);
}
}
catch (error) {
siteDirExisted = true;
}
switch (subcommand) {
case 'build':
if (!siteDirExisted) {
throw new Error(`There's no website directory at ${resolvedSiteDir} to build!`);
}
await generate(flecks, resolvedSiteDir);
spawn('build', resolvedSiteDir);
break;
case 'create': {
if (siteDirExisted) {
throw new Error(`A website directory at ${resolvedSiteDir} already exists!`);
}
const templateDirectory = dirname(
__non_webpack_require__.resolve('@flecks/dox/website/sidebars.js'),
);
await cp(templateDirectory, resolvedSiteDir, {recursive: true});
// Copy the docusaurus config if it doesn't already exist.
try {
await access(join(FLECKS_CORE_ROOT, 'build', 'docusaurus.config.js'));
}
catch (error) {
await rename(
join(resolvedSiteDir, 'docusaurus.config.js'),
join(FLECKS_CORE_ROOT, 'build', 'docusaurus.config.js'),
);
}
// eslint-disable-next-line no-console
console.error(`website directory created at ${resolvedSiteDir}!`);
break;
}
case 'start':
if (!siteDirExisted) {
throw new Error(`There's no website directory at ${resolvedSiteDir} to start!`);
}
await generate(flecks, resolvedSiteDir);
spawn('start', resolvedSiteDir);
break;
default:
break;
}
},
args: [
2024-01-22 09:16:07 -06:00
program.createArgument('subcommand', 'Docusaurus command to run')
.choices(['build', 'create', 'start']),
2023-12-31 16:21:43 -06:00
siteDirArgument,
],
};
return commands;
};