rp-markdown-docs
Version:
A modern, beautiful documentation generator that converts markdown files into interactive HTML documentation sites
60 lines • 2.42 kB
JavaScript
import fs from 'fs-extra';
import path from 'path';
import chalk from 'chalk';
import ora from 'ora';
import chokidar from 'chokidar';
import { DocumentationGenerator } from '../../generator/DocumentationGenerator.js';
export async function generateDocs(input = './docs', options) {
const spinner = ora('Generating documentation...').start();
try {
const inputDir = path.resolve(input);
const outputDir = path.resolve(options.output || './docs-output');
const configFile = path.resolve(options.config || './mdocs.config.js');
// Load configuration
let config = {};
if (await fs.pathExists(configFile)) {
const configModule = await import(configFile);
config = configModule.default || configModule;
}
const generator = new DocumentationGenerator({
inputDir,
outputDir,
baseUrl: options.baseUrl || '/',
...config
});
await generator.generate();
spinner.succeed(chalk.green('Documentation generated successfully!'));
console.log(chalk.blue('Output directory:'), chalk.cyan(outputDir));
if (options.watch) {
console.log(chalk.yellow('\nWatching for changes...'));
const watcher = chokidar.watch(inputDir, {
ignored: /node_modules/,
persistent: true
});
watcher.on('change', async (filePath) => {
console.log(chalk.gray(`File changed: ${path.relative(inputDir, filePath)}`));
const regenerateSpinner = ora('Regenerating...').start();
try {
await generator.generate();
regenerateSpinner.succeed(chalk.green('Regenerated successfully!'));
}
catch (error) {
regenerateSpinner.fail(chalk.red('Regeneration failed'));
console.error(error);
}
});
// Keep the process running
process.on('SIGINT', () => {
console.log(chalk.yellow('\nStopping watcher...'));
watcher.close();
process.exit(0);
});
}
}
catch (error) {
spinner.fail(chalk.red('Failed to generate documentation'));
console.error(error);
process.exit(1);
}
}
//# sourceMappingURL=generate.js.map