docusaurus-plugin-typedoc
Version:
A Docusaurus plugin to integrate TypeDoc ( + typedoc-plugin-markdown ) into the Docusaurus CLI.
41 lines (40 loc) • 1.7 kB
JavaScript
import * as fs from 'fs';
import { getPluginOptions } from './options.js';
export default async function pluginDocusaurus(context, opts) {
await generateTypedoc(context, opts);
return {
name: 'docusaurus-plugin-typedoc',
extendCli(cli) {
cli
.command('generate-typedoc')
.description(`[docusaurus-plugin-typedoc] Generate TypeDoc docs independently of the Docusaurus build process.`)
.action(async () => {
context.siteConfig?.plugins?.forEach((pluginConfig) => {
// Check PluginConfig is typed to ['docusaurus-plugin-typedoc', PluginOptions]
if (pluginConfig &&
typeof pluginConfig[0] === 'string' &&
pluginConfig[0].includes('docusaurus-plugin-typedoc') &&
typeof pluginConfig[1] === 'object') {
generateTypedoc(context, pluginConfig[1]);
}
});
});
},
};
}
/**
* Initiates a new typedoc Application bootstrapped with plugin options
*/
async function generateTypedoc(context, opts) {
// get plugin options
const options = getPluginOptions(context, opts);
// eslint-disable-next-line @typescript-eslint/no-unused-vars
const { id, ...typedocOptions } = options;
// create outDir if it doesn't exist
if (!fs.existsSync(typedocOptions.out)) {
fs.mkdirSync(typedocOptions.out, { recursive: true });
}
// Bootstrap typedoc with options (this mimics the TypeDoc CLI)
const typedoc = await import('./typedoc.cjs');
await typedoc.bootstrap(typedocOptions);
}