@xpack/docusaurus-plugin-doxygen
Version:
A Docusaurus plugin to integrate Doxygen into a Docusaurus project.
101 lines • 4.08 kB
JavaScript
/*
* This file is part of the xPack project (http://xpack.github.io).
* Copyright (c) 2025 Liviu Ionescu. All rights reserved.
*
* Permission to use, copy, modify, and/or distribute this software
* for any purpose is hereby granted, under the terms of the MIT license.
*
* If a copy of the license was not distributed with this file, it can
* be obtained from https://opensource.org/licenses/MIT.
*/
import { generateDoxygen } from './cli/generate.js';
import { defaultOptions } from './options.js';
import { generateDocusaurusMdx, parseDoxygen } from './main.js';
// ----------------------------------------------------------------------------
// The Docusaurus plugin entry point.
export const pluginName = '@xpack/docusaurus-plugin-doxygen';
export default async function pluginDocusaurus(context, options // The user options in docusaurus.config.ts
) {
// console.log(util.inspect(context, { compact: false, depth: 999 }))
// Already merged with the defaults in validateOptions.
const actualOptions = options;
if (actualOptions.verbose) {
console.log();
if (actualOptions.id !== undefined && actualOptions.id !== 'default') {
console.log(`${pluginName}: instance '${actualOptions.id}' starting...`);
}
else {
console.log(`${pluginName}: starting...`);
}
}
// It is not possible to run the actions here, since this is executed even
// for CLI commands, when it is not necessary.
return {
name: pluginName,
// https://docusaurus.io/docs/api/plugin-methods/lifecycle-apis
async loadContent() {
if (actualOptions.runOnStart) {
const dataModel = await parseDoxygen({ options: actualOptions });
await generateDocusaurusMdx({
dataModel,
options: actualOptions,
siteConfig: context.siteConfig
});
if (actualOptions.verbose) {
console.log();
if (actualOptions.id !== undefined && actualOptions.id !== 'default') {
console.log(`${pluginName}: instance '${actualOptions.id}' generation of docs completed.`);
}
else {
console.log(`${pluginName}: generation of docs completed.`);
}
}
return { dataModel };
}
return undefined;
},
// No need for contentLoaded().
// https://docusaurus.io/docs/api/plugin-methods/extend-infrastructure#extendCli
extendCli(cli) {
extendCliGenerateDoxygen(cli, context, options);
}
};
}
function formatDuration(n) {
if (n < 1000) {
return `${n} ms`;
}
else if (n < 100000) {
return `${(n / 1000).toFixed(1)} sec`;
}
else {
return `${(n / 60000).toFixed(1)} min`;
}
}
export function extendCliGenerateDoxygen(cli, context, options) {
let startTime;
cli
.command('generate-doxygen')
.option('--id <string>', 'Specify the plugin instance')
.description('[@xpack/docusaurus-plugin-doxygen] Generate Doxygen docs independently of the Docusaurus build process.')
.action(async (cliOptions) => {
startTime = Date.now();
console.log();
console.log('Running \'docusaurus generate-doxygen\'...');
const exitCode = await generateDoxygen(context, options, cliOptions);
console.log();
const durationString = formatDuration(Date.now() - startTime);
console.log(`Running 'docusaurus generate-doxygen' has completed successfully in ${durationString}.`);
return exitCode;
});
}
export function validateOptions({ validate, options: userOptions }) {
// Currently only add defaults.
// TODO: validate.
return {
...defaultOptions,
...userOptions
};
}
// ----------------------------------------------------------------------------
//# sourceMappingURL=docusaurus.js.map