UNPKG

docusaurus-plugin-typedoc

Version:

A Docusaurus plugin to integrate TypeDoc ( + typedoc-plugin-markdown ) into a Docusaurus project.

43 lines (42 loc) 1.79 kB
import * as fs from 'fs'; import { getPluginOptions } from '../options/options.js'; import { writeSidebar } from './sidebar.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 [string, PluginOptions] if (pluginConfig && 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); // create outDir if it doesn't exist if (!fs.existsSync(options.out)) { fs.mkdirSync(options.out, { recursive: true }); } // configure options for typedoc const { // eslint-disable-next-line @typescript-eslint/no-unused-vars id, siteDir, numberPrefixParser, docsPresetPath, sidebar, ...optionsPassedToTypeDoc } = options; const typeDocApp = await import('./typedoc.cjs'); // bootstrap typedoc with options await typeDocApp.bootstrap(optionsPassedToTypeDoc, async (renderer) => { writeSidebar(renderer.navigation, renderer.outputDirectory, sidebar, siteDir, docsPresetPath, numberPrefixParser); }); }